プロが教えるわが家の防犯対策術!

現在MT4で独自のEAを作ろうとプログラムの勉強をしているのですが、

同じEAを同時に複数の通貨ペアで動かし、尚且つ1通貨ペア当たりの同時に持てる最大ポジション数を使用者側で(Externで)設定出来るようにしたいです。

具体的に言いますと、同時に持てるポジションの数を
USDJPYは最大2つ
GBPJPYは最大3つ
AUDJPYは最大1つ
と、設定して上記3つの通貨ペアで同じEAを動かした時に、
ポジションの合計が上記通り(最大で6個)になるようなものを作りたいのですが、
どうしたらよいのでしょうか?

(プログラム上部)
extern int MaxOrder=2; //使用者側で設定出来る同時に持てる最大ポジション数

(int start()内)
int order=0;
for(int i=OrdersTotal()-1; i>=0; i- -)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
order=order+1;
}

if(order>0)
{
 if(決済条件)
 {
 決済プログラム;
 }
}

if(order<MaxOrder)
{
 if(エントリー条件)
 {
 エントリープログラム;
 }
}

みたいなプログラムでやってみたり、実は他にもいろいろと試しているのですが、うまくいきません。

プログラム初心者なので出来れば詳細に教えていただけると助かります。

宜しくお願い致します。

教えて!goo グレード

A 回答 (1件)

MaxOrderの値を、Symbol()によって設定するしかないでしょう。

この回答への補足

fxsarahさん、ご回答ありがとうございます。また返答が遅くなりまして申し訳ありません。

>MaxOrderの値を、Symbol()によって設定するしかないでしょう。

とは、具体的にはどういうプログラムを書けばいいのでしょうか?
fxsarahさんからご返答をいただく前にもいろいろと試しており、ちょっと混乱しております。

お手数ですがもう少し詳細にお教えいただけると助かります。

補足日時:2009/12/07 15:19
    • good
    • 0
この回答へのお礼

度々の自己レス申し訳ありません。
どうやら解決できた気がします。

メインスレのプログラム中には必要ないと思ったので記載しなかったのですが、ticket変数の宣言場所に間違いがあったようで、下記の様にしたところ大丈夫でした。

(プログラム上部)
extern int MaxOrder=2; //使用者側で設定出来る同時に持てる最大ポジション数

int start()
{

int order=0;
int ticket=0;

for(int pos=OrdersTotal()-1; pos>=0; pos- -)
{
if(OrderSelect(pos,SELECT_BY_POS)= =false) continue;
if(OrderSymbol()= =Symbol() && OrderMagicNumber()= =MagicNumber)
order+ +;
}

if(order>0)
{
if(買いポジションの決済条件) 買いポジション決済関数;
if(売りポジションの決済条件) 売りポジション決済関数;
}

if(order<MaxOrder)
{
if(買いポジションのオープン条件)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Example_EA",MagicNumber,0,Blue);

if(TP>0)
{
if(ticket>0)
{
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point,0,Blue);
}
}

if(SL>0)
{
if(ticket>0)
{
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Ask-SL*Point,OrderTakeProfit(),Blue);
}
}
return(0);
}

else if(売りポジションのオープン条件)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Example_EA",MagicNumber,0,Red);

if(TP>0)
{
if(ticket>0)
{
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-TP*Point,0,Red);
}
}

if(SL>0)
{
if(ticket>0)
{
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Bid+SL*Point,OrderTakeProfit(),Blue);
}
}
return(0);
}
}
}

ありがとうございました。

お礼日時:2009/12/07 19:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

教えて!goo グレード

人気Q&Aランキング