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

 
如果(TralProcent!=0)
{ NewProfProc=Profit(-1)/(AccountBalance()/100); if(NewProfProc>0 && (ProfitProcent==0 || ProfitProcent<NewProfProc)) {ProfitProcent=NormalizeDouble(NewProfProc, 2); } if(ProfitProcent>0 &&ProfitProcent>(TralProcent+TralStartProcent)) {TrallingProcent=ProfitProcent-TralProcent;} //+------------------------------------------------------------------+ if(NewProfProc>0 && TrallingProcent!=0 && NewProfProc<=TrallingProcent) {CloserS(); CloserB(); ProfitProcent=0; TrallingProcent=0;}

------robot在%balance中使用拖网,请告知如何在这里添加步骤变化。如果我理解正确的话,它是需要Tralingprocent的。例如,如果步骤=2%,那么尾随百分比至少增加2%。
 
khorosh:

阿尔乔姆-特里什金

对象 - 它们可以被输出到任何终端窗口及其子窗口。

--------------------------------------------------------------------------------------------------------------------------------------

我试过这样做,但没有效果。

也许窗户的编号有问题。如果图表中有一个单独的窗口,其编号==1?

wndNum 用于显示的窗口的编号

int wndNum=1;

int OnInit()
 {
 string short_name=MQLInfoString(MQL_PROGRAM_NAME);
 short_name+=": MyIndicator";
 IndicatorSetString(INDICATOR_SHORTNAME,short_name);
 wndNum=ChartWindowFind(0,short_name);
 //---
   return(INIT_SUCCEEDED);
 }

// Функция создания объекта
void SetLabel(string nm,string text,long xd,long yd,int fs,string font,int cr,int an,color cl,string tooltip,bool sel) {
 if(ObjectFind(0,nm)<0) {
    ObjectCreate(0,nm,OBJ_LABEL,wndNum,0,0);
    ObjectSetInteger(0,nm,OBJPROP_CORNER,cr);
    ObjectSetInteger(0,nm,OBJPROP_ANCHOR,an);
    ObjectSetString (0,nm,OBJPROP_FONT,font);
    ObjectSetInteger(0,nm,OBJPROP_FONTSIZE,fs);
    ObjectSetInteger(0,nm,OBJPROP_BACK,false);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,sel);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,sel);
    ObjectSetString (0,nm,OBJPROP_TOOLTIP,tooltip);
  }
    ObjectSetInteger(0,nm,OBJPROP_YDISTANCE,yd);
    ObjectSetInteger(0,nm,OBJPROP_XDISTANCE,xd);
    ObjectSetString (0,nm,OBJPROP_TEXT,text);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,cl); 
 }
P.S.khorosh,我不能在私下里回复--聊天不工作
 
Vitaly Muzichenko:

wndNum 用于显示的窗口的编号

P.S.khorosh,我不能在私下里回复你--聊天系统不工作了

谢谢你,维塔利!那我如何把它附在一个单独窗口中的指标的曲线顶端?我试着把Time[0]和零条上的曲线缓冲值设为坐标,但没有成功。

 
khorosh:

谢谢你,维塔利!那么如何将其与单独窗口中的指标的曲线尖端联系起来?我试着把Time[0]和零点栏上的曲线缓冲值设为坐标,但并不奏效。

这就是他回答这个问题的方式。唯一经常出现的细微差别是wndNum值本身。wndNum的值不是一个常数。必须不断监测。用户可以删除指标子窗口,该窗口在当前窗口之前。也不要在OnInit()中寻找指标本身。这段代码应该被移到OnCalculate()。在任何情况下,你都应该检查子窗口的索引是否正确。

 
Ihor Herasko:

他就是这样回答这个问题的。唯一经常出现的细微差别是wndNum值本身。wndNum的值不是一个常数。必须不断监测。用户可以删除指标子窗口,该窗口在当前窗口之前。也不要在OnInit()中寻找指标本身。这段代码应该被移到OnCalculate()。在任何情况下,你必须始终检查子窗口的索引是否正确。

他的例子显示,对象的坐标最初被假定为像素(静态对象)。但我需要与一个指标曲线绑定。所以,首先我们要计算这些坐标。在他的作品中没有显示。我试过这样做,但没有用(在LevLabelSpread变量中,在第一个柱子上有一个曲线缓冲值)。

....
int X=0,Y=0;
   wndNum=ChartWindowFind(0,Shortname);  
   ChartTimePriceToXY( 0,wndNum,Time[1],LevLabelSpread,X,Y); Print("X=",X," Y=",Y);    
   if(ObjectFind("_Spread")<0) 
     {
      ObjectCreate(0,"_Spread", OBJ_TEXT, wndNum, 0,0);
      ObjectSetText("_Spread", "                Spread", 10, "Arial", clrYellow);
     }
   else
     {
      ObjectSetInteger(0,"_Spread",OBJPROP_YDISTANCE,Y);
      ObjectSetInteger(0,"_Spread",OBJPROP_XDISTANCE,X);
      ObjectSetString (0,"_Spread",OBJPROP_TEXT,"                Spread");
     } 

.... 
 
khorosh:

他有一个例子,对象的坐标最初被假定为像素(静态对象)。但我需要把它与一个指标曲线联系起来。所以,我必须事先计算出这些坐标。在他的作品中没有显示。我试过这样做,但没有成功(变量LevLabelSpread在第一个条形上有曲线缓冲值)。

为什么要用像素来计算TEXT类型对象的价格?它的定位是由酒吧时间和价格决定的。我是这样想的。

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   int nWndIndex = ChartWindowFind();
   if (nWndIndex < 0)
      return 0;
      
   string sName = "MyText";
   if (ObjectFind(0, sName) < 0)
      ObjectCreate(0, sName, OBJ_TEXT, nWndIndex, time[rates_total - 1], <здесь значение индикатора>);
      
   ObjectSetInteger(0, sName, OBJPROP_ANCHOR, ANCHOR_LEFT);
   ObjectSetString(0, sName, OBJPROP_TEXT, "Sample text");

   return(rates_total);
}

结果。


 
Ihor Herasko:

为什么要用像素来计算TEXT对象的价格?它的定位是由酒吧时间和价格决定的。我是这样想的。

结果。


非常感谢你。

 
Ihor Herasko:


结果很好。


 
请解释这两个概念的含义和目的:图表手柄和图表标识符。它们之间有什么区别,以及如何和何时使用它们。
 
khorosh:
请解释两个概念的含义和目的:图表手柄和图表标识符。它们之间有什么区别,以及如何和何时使用它们。

告诉我你是如何得到这两样东西的。到目前为止,我们似乎是在谈论同一件事。

原因: