新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 681

 
Igor Makanu:

可能是这样的,用于销售。

利润=NormalizeDouble((OrderOpenPrice()-Ask)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2) 。

以 Bid 买入,即 ( Bid -OrderOpenPrice())

TakeProfit=100点 Lot=0.1,当TP平仓时,该货币的未平仓头寸的利润将是多少?

profit=NormalizeDouble((OrderOpenPrice()-Тейк_Профит*Point)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2);

它不是这样的。

 
Vitaly Muzichenko:

需要操作:地段->金钱->距离,以及打勾的费用

金钱只是发现的东西 )

 
Vitaly Muzichenko:

该解决方案没有考虑到佣金和互换。积分似乎是在盈利,但成本是亏损的。

我不喜欢OrderProfit()+OrderComission()+OrderSwap()这个带有佣金和互换的公式。

帮助中说,佣金可能是积分或存款货币,这个公式没有考虑到这一点,在测试中可能弊大于利,但这是一个品味问题。

Ghabo

Take_Profit =100点,lot =0.1,当TP平仓时,该货币的未平仓头寸的利润将是多少?

它并不像那样工作。

数学不是你的专长吗?;)

否则的话。

利润=NormalizeDouble((Take_Profit *Point)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2) 。

如果缩短,将是

profit=NormalizeDouble(lot *TakeProfit*MarketInfo(_Symbol,MODE_TICKVALUE),2)。

 
Vitaly Muzichenko:

这里的意思是,OrderProfit()应该在计算中使用。

在发送订单之前,如何计算一个仓位 的手数,以便在TakeProfit启动时获得20美元的利润?OrderProfit()在这里没有帮助--现在还没有位置。

或者说:未来头寸的获利是多少,如果我以0.1手开仓,我将获得20美元的利润?在这里,OrderProfit()也没有帮助--出于同样的原因。

还有一种方法:未来的头寸应该是什么止损,以便当我用0.1手开仓时,得到的损失不超过可用资金的3%?在这里,OrderProfit()也没有帮助--出于同样的原因。

更新:在不知道佣金和交换的情况下,所有的计算将是近似的。如果我们需要精确到一分钱或一个点,我们将不得不 "当场 "调整止损单。

 
Artyom Trishkin:

在发送订单开仓 之前,我如何计算未来头寸的手数,以便在触发止盈时,我获得20美元的利润?OrderProfit()在这里没有帮助--现在还没有头寸。

或者说:未来头寸的获利是多少,如果我以0.1手开仓,我将获得20美元的利润?在这里,OrderProfit()也没有帮助--出于同样的原因。

我只是在打开之前写下并理解了我要计算的内容,并立即删除了信息。你的回答真是太聪明了)

我曾经写过这样的东西,并在输入参数中输入每1手的金额作为佣金。

 
你好,我搞不清楚,请帮助。这个代码有什么问题?我在评论中显示平均值,它随着每一次打勾 而增加?帮助:-))))
 for(shift = 0; shift <= Bars-1; shift++)
  {
      zz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift);
           if(zz > 0.0)
           {
           HZZ[ww]=zz;
           ww++;          
           }
  }
   
  
       for(ww=0;ww<=nn;ww++){
      if(HZZ[ww]>HZZ[ww+1]){SredRazmax += HZZ[ww];}     
      if(HZZ[ww]<HZZ[ww+1]){SredRazmin += HZZ[ww+1];}
      
       
  Comment("Средний размах = ", (SredRazmax-SredRazmin)/nn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 
 
Dmitry Belov:
它是否随着每次打钩 而增加?帮助:-))))

这意味着你在计算你提交的代码中的每一个刻度,而不是初始化SredRazmax和SredRazmin 变量。

在使用前初始化变量是个好习惯--这是大学教给你的,它可以减少发现bug的时间;)

 

同事们,为什么这段代码在策略测试器中拒绝执行,但在实时中却能正确执行。我具体说的是OnChartEvent()函数。在测试器的可视化模式中,当按钮被点击时,它不会被执行。

input double lot=0.1;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ButtonCreate("ButtonBuy",100,100,200,40,"Buy",15,clrBlue);
   ButtonCreate("ButtonSell",100,200,200,40,"Sell",15,clrRed);
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   long cid=ChartID();
   if(id==CHARTEVENT_OBJECT_CLICK && sparam=="ButtonBuy")
     {
      if(OrderSend(_Symbol,OP_BUY,lot,Ask,200,0,0,NULL,0,0,clrBlue)==-1)
         Print("Error: ",GetLastError());
      ObjectSetInteger(cid,"ButtonBuy",OBJPROP_STATE,false);
     }
   if(id==CHARTEVENT_OBJECT_CLICK && sparam=="ButtonSell")
     {
      if(OrderSend(_Symbol,OP_SELL,lot,Bid,200,0,0,NULL,0,0,clrRed)==-1)
         Print("Error: ",GetLastError());
      ObjectSetInteger(cid,"ButtonSell",OBJPROP_STATE,false);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| ButtonCreate                                                     | 
//+------------------------------------------------------------------+ 
void ButtonCreate(string name,int x,int y,int width,int height,
                  string text,int font_size,color back_clr)
  {
   long cid=ChartID();
   int subWind=0;
   ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER;
   string font="Cambria";
   color text_clr=clrBlack;
   color border_clr=clrBlack;
   bool state=false;
   bool back=false;
   bool selectable=false;
   bool selected=false;
   bool hidden=true;
   long zorder=0;
   if(ObjectFind(cid,name)==-1)
     {
      ObjectCreate(cid,name,OBJ_BUTTON,subWind,0,0);
      ObjectSetInteger(cid,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(cid,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(cid,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(cid,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(cid,name,OBJPROP_CORNER,corner);
      ObjectSetString(cid,name,OBJPROP_TEXT,text);
      ObjectSetString(cid,name,OBJPROP_FONT,font);
      ObjectSetInteger(cid,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(cid,name,OBJPROP_COLOR,text_clr);
      ObjectSetInteger(cid,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(cid,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(cid,name,OBJPROP_BACK,back);
      ObjectSetInteger(cid,name,OBJPROP_STATE,state); 
      ObjectSetInteger(cid,name,OBJPROP_SELECTABLE,selectable);
      ObjectSetInteger(cid,name,OBJPROP_SELECTED,selected);
      ObjectSetInteger(cid,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(cid,name,OBJPROP_ZORDER,zorder);
     }
  }
//+------------------------------------------------------------------+
 
Oleg Remizov:

同事们,为什么这段代码在策略测试器中拒绝执行,但在实时中却能正确执行。我具体说的是OnChartEvent()函数。在测试器的可视化模式中,当按钮被点击时,它不会被执行。

因为OnChartEvent()在MT4的测试器中不起作用。检查测试器中的按钮状态标志。
 
Artyom Trishkin:
因为在MT4中OnChartEvent()在测试器中不起作用。检查测试器中的按钮状态标志。

谢谢你!我有这种怀疑,但我在帮助中没有找到OnChartEvent() 在测试器中不工作的信息。

原因: