• 締切済み

MT4のEAで通貨ペア毎に最大ポジション数を設定出来るものをプログラムしたい

現在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(エントリー条件)  {  エントリープログラム;  } } みたいなプログラムでやってみたり、実は他にもいろいろと試しているのですが、うまくいきません。 プログラム初心者なので出来れば詳細に教えていただけると助かります。 宜しくお願い致します。

みんなの回答

  • fxsarah
  • ベストアンサー率45% (19/42)
回答No.1

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

greyseal
質問者

お礼

度々の自己レス申し訳ありません。 どうやら解決できた気がします。 メインスレのプログラム中には必要ないと思ったので記載しなかったのですが、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); } } } ありがとうございました。

greyseal
質問者

補足

fxsarahさん、ご回答ありがとうございます。また返答が遅くなりまして申し訳ありません。 >MaxOrderの値を、Symbol()によって設定するしかないでしょう。 とは、具体的にはどういうプログラムを書けばいいのでしょうか? fxsarahさんからご返答をいただく前にもいろいろと試しており、ちょっと混乱しております。 お手数ですがもう少し詳細にお教えいただけると助かります。

関連するQ&A