デベロッパーガイド
| FX・自動売買・システムトレードのすべてがわかるMT4やEAの投資情報サイト【GogoJungle】

閲覧履歴
デベロッパー ガイド

このドキュメントについて

EA開発に携わるプログラマー、これからEAを開発してみようと思うプログラマーの方を対象に、
よくあるコードのミスを提示しています。
今後の開発の参考にして頂けたらと思います。



一括決済でのfor文について

ポジションを一括決済したい時などに、for文で処理をする場合、下記のようにデクリメントで記述する事を推奨いたします。 (参考URL:mt4(MetaTrader4)使い倒シストレ)


for( int i=OrdersTotal()-1; i>=0; i-- ){

    int ticket = 0;

    if( OrderSelect(i, SELECT_BY_POS) == false ) break;
    if( OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber ){

        continue;

    }

    ticket = OrderTicket();
    OrderClose( ticket, OrderLots(), OrderClosePrice(), slippage, Color );

}


ドテン売買EAについて

ドテン売買をする際に、保有中のポジションを決済し、新規発注という流れになると思います。 この決済処理後、きちんと決済が完了したかを確認する処理を入れておくことを推奨します。 サーバーの約定拒否等によって決済注文が通らなかった場合、決済されていないにも関わらず新たなポジションを持ってしまい、意図しない両建てをしてしまうEAが頻発しております。 下記の例では決済後ポジション数を確認し、新たなポジションを出すようにしています。


if( IsDotenFlag ){  //ドテン売りをおこなう

    //保有している買いポジションの決済
    OrderClose( ticket, lots, price, slippage, Color );

    //保有している買いポジション数を確認
    int buyPosition = GetBuyPosition();

    //買いポジションが0であることを確認し、新規ポジションの発注
    if( buyPosition == 0 ){

        OrderSend( symbol, OP_SELL, ... ...);

    }

}