考虑点差和佣金

问题描述

我想编写一个 EA,当打开买入/卖出头寸时,利润为 60 点。如果仓位达到-20点利润,则在第一个仓位的反方向开仓,盈利60点

听到代码

if(orderType==OP_BUY)
        ticket = OrderSend(Symbol(),orderType,lots,openPrice,5,stopLossprice,takeProfitPrice,"AFKARIAUS ",MagicBuy,clrGreen);
if(orderType==OP_SELL)
        ticket = OrderSend(Symbol(),MagicSell,clrGreen);

for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TradES))
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicBuy && OrderType()==OP_BUY)
                BuyTicket=OrderSend(Symbol(),OP_SELLSTOP,OrderOpenPrice()-20*Point,OrderOpenPrice()+60*Point,OrderOpenPrice()-20*Point-60*Point,"AFKARIAUS",MagicBuy+1,clrBlue);

         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicSell && OrderType()==OP_SELL)
                  SellTicket=OrderSend(Symbol(),OP_BUYSTOP,OrderOpenPrice()+20*Point,OrderOpenPrice()-60*Point,OrderOpenPrice()+20*Point+60*Point,MagicSell+1,clrBlue);
     }

一切正常

但是当用真钱测试时,有佣金、点差和掉期。我不知道我该怎么办

请帮帮我

谢谢

解决方法

包含掉期和佣金的智能解决方案就是处理该订单:

  1. 订单选择

  2. OrderSwap 和 OrderCommission(总和)

     if (OrderSelect(ticket_number,SELECT_BY_TICKET,MODE_TRADES)==true)
     {
        current_trade_absolute_profit = OrderSwap() + OrderProfit() + OrderCommission();
     }
    

您还可以像这样查找和存储点值:

double tick_value = MarketInfo(Symbol(),MODE_TICKVALUE);

然后计算当前的点数价格,之后您可以在每次赚取更多点数时简单地替换双倍值

   if (current_pip_number > highest_pip_number)
   {
       highest_pip_number = current_pip_number;
   }
   if (highest_pip_number < current_pip_number + 20)
   {
       OrderClose(ticket_number,lotsize,iClose(NULL,0),slippage,clrViolet);
   }