任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1105

 
shtr:

哇!!!谢谢你!这需要进行一些思考。

也许某处有关于新规则的 "自学"?4位数的页码让人有点紧张...

现在谁容易...在档案馆中还有5个关于新手的此类主题))))。

说实话,如果你已经有编程经验,最好是C++,那么帮助和代码库中的例子已经足够了。如果你完全没有任何经验,你可以先学习C++教程,MQL的语法非常相似。

 
evillive:

现在谁的日子好过了...在档案馆中还有5个关于新手的此类主题))))。

说实话,如果你已经有编程经验,最好是C++,那么帮助和代码库中的例子已经足够了。如果你完全没有任何经验,你可以先学习C++教程,MQL的语法非常相似。

没有经验=C++教程;)))

谢谢你的帮助!

 

下午好,亲爱的先生们!

请帮助我在指示器上添加一个指示货币对 的箭头出现时的警报。

我自己也试过,但正如他们所说,不知道也很难忘记。提前感谢。



#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 白色

#property indicator_color2 White

#property indicator_color3 LightGreen

#property indicator_color4 Red


外来的Int CountBars = 300。

extern string FS = " ** 滤波器的灵敏度:高 <-[1..3]-> 低 ** " 。

外部int Sensitivity = 2;

double g_ibuf_92[];

double g_ibuf_96[]。

double g_ibuf_100[];

double g_ibuf_104[];

int gi_unused_108 = -1;


int init() {

IndicatorBuffers(4)。

SetIndexStyle(2, DRAW_ARROW)。

SetIndexArrow(2, 233)。

SetIndexBuffer(2, g_ibuf_92)。

SetIndexStyle(3, DRAW_ARROW)。

SetIndexArrow(3, 234);

SetIndexBuffer(3, g_ibuf_96)。

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 3, White)。

SetIndexBuffer(0, g_ibuf_100)。

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 3, White)。

SetIndexBuffer(1, g_ibuf_104)。

SetIndexEmptyValue(0,0)。

SetIndexEmptyValue(1,0)。

SetIndexEmptyValue(2,0)。

SetIndexEmptyValue(3,0)。

SetIndexLabel(2, "Buy Signal")。

SetIndexLabel(3, "Sell Signal")。

SetIndexLabel(0, "High")。

SetIndexLabel(1, "Low")。

SetIndexEmptyValue(0, EMPTY_VALUE)。

SetIndexEmptyValue(1, EMPTY_VALUE)。

SetIndexEmptyValue(2, EMPTY_VALUE)。

SetIndexEmptyValue(3, EMPTY_VALUE)。

string ls_0 = "Scalper Signal";

IndicatorShortName(ls_0)。

如果(敏感度<1)敏感度=1。

如果(敏感度>3)敏感度=3。

返回(0)。

}


int deinit() {

返回(0)。

}


double sellSignal(int ai_0) {

bool li_4 = TRUE。

如果(敏感度>2)

如果(iHigh(Symbol(), Period(), ai_0 + 6) >= iHigh(Symbol(), Period(), ai_0 + 5))li_4 = FALSE。

如果(敏感度>1)

如果(iHigh(Symbol(), Period(), ai_0 + 5) >= iHigh(Symbol(), Period(), ai_0 + 4) ) li_4 = FALSE。

如果(敏感度>0)

如果(iHigh(Symbol(), Period(), ai_0 + 4) >= iHigh(Symbol(), Period(), ai_0 + 3) )li_4 = FALSE。

如果(li_4) {

如果(iClose(Symbol(), Period(), ai_0 + 2) < iHigh(Symbol(), Period(), ai_0 + 3)

如果(iClose(Symbol(), Period(), ai_0 + 1) < iLow(Symbol(), Period(), ai_0 + 3)) 返回(iHigh(Symbol(), Period(), ai_0 + 3) + 10.0 * Point)

}

返回(0)。

}


double buySignal(int ai_0) {

bool li_4 = TRUE。

如果(敏感度>2)

如果(iLow(Symbol(), Period(), ai_0 + 6) <= iLow(Symbol(), Period(), ai_0 + 5) ) li_4 = FALSE。

如果(敏感度>1)

如果(iLow(Symbol(), Period(), ai_0 + 5) <= iLow(Symbol(), Period(), ai_0 + 4) ) li_4 = FALSE。

如果(敏感度>0)

如果(iLow(Symbol(), Period(), ai_0 + 4) <= iLow(Symbol(), Period(), ai_0 + 3) ) li_4 = FALSE。

如果(li_4) {

如果(iClose(Symbol(), Period(), ai_0 + 2) > iLow(Symbol(), Period(), ai_0 + 3)

如果(iClose(Symbol(), Period(), ai_0 + 1) > iHigh(Symbol(), Period(), ai_0 + 3))返回(iLow(Symbol(), Period(), ai_0 + 3) - 10.0 * Point)。

}

返回(0)。

}


int start() {

int li_0 = IndicatorCounted()。

如果(li_0 < 0)返回(-1)。

如果(li_0>0)li_0--。

int li_4 = Bars - li_0;

for (int l_count_8 = 0; l_count_8 < li_4; l_count_8++) {

g_ibuf_92[l_count_8 + 3] = buySignal(l_count_8)。

g_ibuf_96[l_count_8 + 3] = sellSignal(l_count_8)。

如果(buySignal(l_count_8) > 0.0 || sellSignal(l_count_8) > 0.0){

g_ibuf_100[l_count_8 + 3] = iHigh(Symbol(), Period(), l_count_8 + 3) 。

g_ibuf_104[l_count_8 + 3] = iLow(Symbol(), Period(), l_count_8 + 3) 。

}

}

返回(0)。

}

附加的文件:
 

你好,挖掘机。

我的订单历史 结果有点歪了。

战略。

1-在不同的方向上建立2个订单(事实上是锁定),有一个短的停止和一个长的利润。

如果价格稳定地走出区间,它将打掉其中一个订单的止损,并在另一个订单上争取多头利润。

3 - 当其中一个订单的止损被击中时,在其开仓水平上放置一个挂单,如果价格回升,该订单将再次被打开。

而我们则回到仓位状态,直到下一次通过打掉空头止损而获得利润的动作。

目标。

追踪3次停止敲门,因为在第4个订单上,马丁被触发了。问题是,出了问题。我通过OrderProfit()的历史来确定订单的盈利能力。

但我还是不明白OrdersHistoryTotal()是如何工作的。该函数是检查订单号还是订单数量?

同样,我不明白它是如何解释删除一个头寸的(要么是损失,要么是什么都没有)。在这样的情况下,历史上除了损失之外还有很多其他的东西,我怎么能追踪到3个连续的损失?

 
Fartarantula:

你好,挖掘机。

我的订单历史结果有点歪了。

战略。

1-在不同的方向上建立2个订单(事实上是锁定),有一个短的停止和一个长的利润。

如果价格稳定地走出区间,它将打掉其中一个订单的止损,并在另一个订单上争取多头利润。

3 - 当其中一个订单的止损被击中时,在其开仓水平上放置一个挂单,如果价格回升,该订单将再次被打开。

并在下一次通过打掉空头止损而获利的行动之前,回到锁定的状态。

目标。

为了追踪3个停止的敲门声,在第4个订单上,马丁被触发了。问题是,出了问题。我通过OrderProfit()的历史来确定订单的盈利能力。

但我还是不明白OrdersHistoryTotal()是如何工作的。该函数是检查订单号还是订单数量?

同样,我不明白它是如何解释删除一个头寸的(要么是损失,要么是什么都没有)。在这样的情况下,当历史显示除了损失之外还有很多其他信息时,我应该如何追踪3个随之而来的损失?

首先要记住的是,挂单 不是亏损的,它要么已经触发,要么已经被删除。

损失应该出现在市场订单上(买入,卖出)。

OrdersHistoryTotal()返回可用的交易历史中的订单数量(如果选择了 "完整历史 "模式,包括从账户中存入和取出的订单)。数字0通常是第一个存款,即第一笔订单;数字OrdersHistoryTotal()-1是历史上最后一笔订单。

这意味着我们必须从最后一个订单到第一个订单进行循环,同时计算挂单和输单。

但是,如果我们总能等到价格达到止损点关闭的订单水平,并根据市场情况立即打开订单,那么为什么还要下挂单?在这种情况下,限价单是一个不必要的环节,因为它混淆了账户。

 
Fartarantula: 战略。

1-在不同的方向上建立2个订单(实际锁定),有一个短止损和一个长利润。

2-如果价格稳定地走出区间,就会打掉其中一个订单的止损,并在另一个订单上争取多头利润。

我通过程序员的眼睛看了你的策略。当价格上升时,它达到了卖出SL,所以有一个买入订单,它的SL和TP在上面的某个地方。在这种情况下,你已经成功地在平仓单上获得了一个小的损失。现在让我们考虑有两个挂单的变体。与其开两个订单,不如在你有SL的地方下两个挂单。当价格达到买入止损点时,买入订单被打开,我们有相同的位置,但没有损失。现在是最有趣的事情。随着价格的上升......。

 

...随着价格在你的原则下上升,你的TP越来越远。而且,如果你考虑到我们当下的行动,你获利的机会比我少。

而且,即使我不与你平行交易,你的TP也在点位之间,而我的TP事实上也在点位之间。而这将是永远的--你给了市场一部分的方向性运动。

如果你不知道,那么你应该考虑,即使是不幸的2个点的点差,也会使一个积极的系统变成一个失败的系统。从第一个数字来看,你在5位数的点差上有大约20个点。

因为根据这个数字,同时下达的订单之间的差异 "用眼睛看 "是40个点。

这不是重点......你需要一个代码片段,正确检测一系列3个被打掉的站。为 什么每个人都在试图纠正这个系统?而前述同志的方法论

也不会起作用。市场可能根本不让你开,或者在你不应该开的地方开。伙计,我理解你们所有的人,以及你们对分享经验的渴望。但我只需要追踪三站。

一切就绪,只是碰巧看到我错过了加倍的错误顺序。结果是,Histototal给出了它认为合适的东西,而通过历史上的损失来确定封闭订单的循环错过了订单。

 
Fartarantula 一切都在进行中,我只是无意中看到,我用翻倍的方式滑错了顺序。结果是,Histototal给出了它认为合适的东西,而通过历史上的损失来确定封闭订单的循环错过了订单。

你需要摆脱编码员资格,学习编程的基本知识。这里有更多的细节... 还有这里。

问题就在这里。正如作者所说,在这个剧本中,Histototal 在周日的同一账户上有什么回报。

void OnStart()
{
  Alert("Cчет " + DoubleToStr(AccountNumber(), 0),
        "  Дата ", TimeToStr(TimeLocal(),TIME_DATE),
        "  Ордеров ", OrdersHistoryTotal());
}

为什么不同?

如果一个账户中的订单较少且较多,那么0 228 216 98? 而如果订单较少,则处理速度会更快!

客户端在流汗--无法工作,终端出现故障,Histototal 给出了它想要的东西,循环跳过了它 !

 

大家下午好。帮助我提高指标中的箭头,下面的箭头还可以,但上面的箭头在蜡烛图的上面。

我试过ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20);它没有起作用。箭头(物体)的锚点 在顶部,我怎么把它移上去?

//display signal arrow 
      RefreshRates(); 
   
      if(   (High[i+1]  >upBuffer[i+1] ) 
         && (Close[i+1] >Open[i+1]     ) 
         && (Close[i]   <Open[i]       ) 
        )            
      {  //draw a dot on top of the bar
         string Arrow_name_jack1 = "AboveTopBand_SellBar_jack1_" + TimeToStr(Time[i],TIME_DATE|TIME_SECONDS);  //TimeCurrent()
         ObjectCreate(Arrow_name_jack1, OBJ_ARROW, 0, Time[i], High[i]+iATR(NULL,0,20,i)/5);//5*pips);  //OBJ_ARROW=22,window=0,
//???????????? так не получилось         //  ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20);
            ObjectSet(Arrow_name_jack1, OBJPROP_ARROWCODE, 242          );  //159
            ObjectSet(Arrow_name_jack1, OBJPROP_COLOR,     Yellow    );  //Magenta
            ObjectSet(Arrow_name_jack1, OBJPROP_STYLE,     STYLE_SOLID  );
            ObjectSet(Arrow_name_jack1, OBJPROP_WIDTH,     2            ); 
            
      }
      else
      if (   (Low[i+1]   <dnBuffer[i+1] ) 
          && (Close[i+1] <Open[i+1]     ) 
          && (Close[i]   >Open[i]       ) 
         )            
      {  //draw a dot on top of the bar
          Arrow_name_jack1 = "BelowBotBand_BuyBar_jack1_" + TimeToStr(Time[i],TIME_DATE|TIME_SECONDS);//TimeCurrent()
         ObjectCreate(Arrow_name_jack1, OBJ_ARROW, 0, Time[i], Low[i]-iATR(NULL,0,20,i)/5);//5*pips);  //OBJ_ARROW=22,window=0,
            ObjectSet(Arrow_name_jack1, OBJPROP_ARROWCODE, 241          );//159
            ObjectSet(Arrow_name_jack1, OBJPROP_COLOR,     Yellow   );//Magenta
            ObjectSet(Arrow_name_jack1, OBJPROP_STYLE,     STYLE_SOLID  );
            ObjectSet(Arrow_name_jack1, OBJPROP_WIDTH,     2            ); 
      }
   }//end for(i = limit; i >= 0; i--)
 
mikanit:

大家下午好。帮助我提高指标中的箭头,下面的箭头还可以,但上面的箭头在蜡烛图的上面。

我试过ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20);它没有起作用。箭头(物体)的锚点在顶部,如何向上移动它?

ObjectSetInteger(0,Arrow_name_jack1,OBJPROP_ANCHOR,ANCHOR_BOTTOM)。

我建议使用单独的变量来存储顶部和底部箭头的名称,以避免混淆。

是的,在指标中用物体画箭头是一种变态行为。有指标性的缓冲区

SetIndexStyle(0,DRAW_ARROW,0,1,clrRed);

    SetIndexArrow(0,242);