このEAは、効率的なトレーディングツールとして活用されます。
設定項目は以下の3つです:
- 利益目標
- 損失カット
- マジックナンバー
extern double inTargetProfitMoney = 10; //利益目標 ($) extern double inCutLossMoney = 0.0 //損失カット ($) extern int inMagicNumber = 0 //マジックナンバー
このEAが実行されると、最初にOnInit()関数が呼び出され、入力と変数の初期化が行われます。
int OnInit() { //--- if(inTargetProfitMoney <= 0) { Alert("無効な入力です"); return(INIT_PARAMETERS_INCORRECT); } inCutLossMoney = MathAbs(inCutLossMoney) * -1; //--- return(INIT_SUCCEEDED); }
価格動向があるたびに、OnTick()関数が呼び出されます。
void OnTick() { //--- double tFloating = 0.0; int tOrder = OrdersTotal(); for(int i=tOrder-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderMagicNumber() == inMagicNumber) { tFloating += OrderProfit()+OrderCommission() + OrderSwap(); } } } if(tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0)) { fCloseAllOrders(); } }
OnTick関数内では、総利益または損失を計算し、目標または最大損失限度に達したすべての注文を閉じることができます。
void fCloseAllOrders() { double priceClose = 0.0; int tOrders = OrdersTotal(); for(int i=tOrders-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL)) { priceClose = (OrderType()==OP_BUY)?MarketInfo(OrderSymbol(), MODE_BID):MarketInfo(OrderSymbol(), MODE_ASK); if(!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold)) { Print("警告: 閉じるのに失敗しました"); } } } } }
詳細な情報やMQL4コードの教育共有については、ぜひ私たちのTelegramに参加してください。 t.me/codeMQL