[存档!]免费撰写顾问文章 - 页 11

 
skylord писал(а)>>

你好。

我刚刚开始学习MQL,我正在尝试编写一个EA...

我想在sidus v.2指标的基础上写一个EA,我想让它在我指定的方向上开仓,只有当一个新的条形图诞生时,也就是说,在第一个刻度上,它应该检查信号是否在前一个条形图上,以及什么样的订单--有一个停止和一个采取。附上指标文件。

我没能找到这个信号((。

帮助,或者至少告诉我如何去做......

一个关于Sidus指标的专家顾问

也许这对你有帮助,或者搜索会有帮助!

或第二风!

 

感谢vvavva。我有一个很好的想法,但它跳过了,而且发出了很多的左信号,但这不是我所需要的(

我怎样才能问别人,如何向EA 申请前一棒的指标缓冲区的状态?

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}
else if (sigCurrent==2 &&sigPrevious==1)
{
ExtMapBuffer3[i-1] = Low[i-1]-5*Point;
//ExtMapBuffer4[i] = Bid;
entry=true;
entry_point=Bid;

}
一个EA需要这样的一个匹配条件

double Up;
double Down;
int res;

Up=iCustom(NULL, 0, "sidus_v.2", 3,1);
Down=iCustom(NULL,0, "sidus_v.2")",2,1);
//---- 卖出条件
if(Down==Low)
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,",MAGICMA,0,Red);
return;
}
//---- 买入条件
if(Up==High)
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0," ,MAGICMA,0,Blue);
return;
}

但这是不对的!!!。

请告知在这种情况下如何行动...

 

你好。

我在安静地交易,我使用4个诱因,阻力支撑线,趋势,等等,等等......我的眼睛在屏幕上坏了,你能帮我在箭头上插入声音信号吗(买入,卖出),同样的箭头在历史上也有虚线(重新切割过的)。

附加的文件:
zigandzag.mq4  16 kb
 
skylord писал(а)>>

你好。

我刚刚开始学习MQL,我正在尝试编写一个EA...

我想在sidus v.2指标的基础上写一个EA,我想让它在我指定的方向上开仓,只有当一个新的条形图诞生时,也就是说,在第一个刻度上,它应该检查信号是否在前一个条形图上,以及什么样的订单--有一个停止和一个采取。附上指标文件。

我没能找到这个信号((。

帮助,或者至少告诉我如何去做......

你好,刚刚用我的眼睛运行了代码,对不起,我是个糟糕的蹩脚的人,当然我可能是错的,但指标是否超额完成?让我们试着从逻辑上思考

for(int i=0; i<limit; i++)
   {

从零条数到历史上的所有条数,增加计数器。

ExtMapBuffer1[ i]=iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
     ExtMapBuffer2[ i]=iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
     rsi_sig = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);

这里的一切都很清楚。

pipdiffCurrent=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);

去他妈的MACDAK。

if ( pipdiffCurrent>0 && rsi_sig>50) 
     {
       sigCurrent = 1;  //Up
     }
     else if ( pipdiffCurrent<0 && rsi_sig<50)
     {
       sigCurrent = 2;  //Down

如果macdac大于0,RSI大于50,则sig为1,如果小于,则为2。

到目前为止,一切都很好。

if (sigCurrent==1 && sigPrevious==2)
     {

这里我不明白......如果macdak是正的,RSI大于50,macdak是负的,RSI小于50......因为在下面的代码中有一个条件

sigPrevious=sigCurrent;

那么我们就可以把它们等同起来...

和偷窃未来是一个坏主意......

ExtMapBuffer3[i-1]

不,让我们用这个来代替它,或者说完全修改它,因为我们已经知道了这个逻辑。

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
//----
extern int       FastEMA=14;
extern int       SlowEMA=21;
extern int       RSIPeriod=17;
//----
double BuyBuffer[], SellBuffer[];
int pre_signal = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
     
//----
      SetIndexBuffer(0, BuyBuffer);
      SetIndexLabel(0, "Buy");
      SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(0, 241);
//----
      SetIndexBuffer(1, SellBuffer);
      SetIndexLabel(1, "Sell");
      SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(1, 242);
//----
      return(0);
  }

int deinit()
  {
      
  }

int start()
  {
  

      int counted_bars = IndicatorCounted();

      
   int limit = Bars - 17;

   if( counted_bars > 17) 
     { 
       limit = Bars - counted_bars; 
     }

      for(int i = limit; i >= 0; i --)
        {
             BuyBuffer[ i] = EMPTY_VALUE;
             SellBuffer[ i] = EMPTY_VALUE;      
             
                
                 double a = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 double s = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 
                
                
                 double a1 = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double s1 = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double d1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i)-50;
             //----
           if( a< s && a1> s1 && d1>0)
               {
                    BuyBuffer[ i] = Low[ i] - iATR(NULL, 0, 14, i);
                    
               }
             if( a> s && a1< s1 && d1<0)
               {
                    SellBuffer[ i] = High[ i] + iATR(NULL, 0, 14, i);         
                    
               }
        
      
        }
      return(0);
  }

现在看,这是一幅悲伤的画面。 比较一下。

虽然我可能是错的,当然,指标没有重新绘制,但请原谅我,也许你可以使用开盘价(特别是在RSI中),但不使用收盘价,这样信号就会出现在条形图上,它应该在那里=(

 

谢谢你的关心vtoroe_dyxanie))))我不写指标,它不根据我的观察重新绘制。我从下一个条形图的第一个刻度开始使用它,当时它已经锁定。这就是为什么我需要知道在第一个钩上的前一个条形上有什么。而它为什么要窃取未来呢?在我看来,在一个给定的tick上,如果有这样的匹配,它就给sigCurrent分配一个,在变量sigPrevious的末尾,它分配同样的sigCurrent。

sigPrevious=sigCurrent;

然后在下一个tick上,如果sigCurrent已经是2,而sigPrevious变量自然会将缓冲区填成1

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

而至于这个。

ExtMapBuffer3[i-1]

我自己也不太明白......

但它似乎工作得很好,箭头在信号出现的条形上画出来了!这就是所谓的信号。

但当我去掉-1时,出现了很多惊喜(



 
skylord >> :

谢谢你的关心vtoroe_dyxanie))))我没有写这个指标,它没有根据我的观察重新绘制。我从下一个条形图的第一个刻度开始使用它,当时它已经锁定。这就是为什么我需要知道在第一个钩上的前一个条形上有什么。而它为什么要窃取未来?在我看来,在一个给定的tick上,如果有这样的匹配,它就给sigCurrent分配一个,在变量sigPrevious的末尾,它分配同样的sigCurrent。

sigPrevious=sigCurrent;

然后在下一个tick上,如果sigCurrent已经是2,而sigPrevious变量自然会将缓冲区填成1

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

而至于这个。

ExtMapBuffer3[i-1]

我自己也不太明白......

但它似乎工作得很好,箭头在信号出现的条形上画出来了!这就是所谓的信号。

但当我去掉-1时,有很多惊喜(



但它还有一个副作用。有时,当条件得到满足时,它会发出信号,但不会画出箭头。但当我再次把它放在图表上时,所有的箭头都会回到它们的位置。有没有办法让它再次在图表上 "编译",或再次更新其Befer?

 
skylord писал(а)>>

为什么它能偷走未来?如果有这样的匹配,它似乎会在给定的tick上给sigCurrent分配一个,并且在最后给sigPrevious变量分配相同的sigCurrent。

sigPrevious=sigCurrent;

然后在下一个tick上,如果sigCurrent已经是2,而sigPrevious变量自然会将缓冲区填成1

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}



你真实的、不专心的我...

关于。"我从下一个条形图的第一个刻度开始使用它,当时它已经固定了。这就是为什么我需要在第一个刻度上知道前一个柱子上的情况。" 而我真的想知道,我们是否可以用

doubleiCustom( ....int shift)

全知的参考说

移位 - 从指标缓冲区获得的数值的索引(相对于当前条形图,向后移动指定的周期数)。

我想知道你是否可以这样写(我自己也想知道)。

for (i=0; i<limit;i++){

如果(iCustom(NULL, 0, "sidus_v.2", 3, i+1)<0 && iCustom(NULL, 0, "sidus_v.2", 3,i)>0)

....

因为ooooopsie Wise论坛的用户很难屈尊于两个书呆子,让我自己去提高技能,因为它可能会派上用场。

 
vtoroe_dyxanie писал(а)>>

诚然,我是不专心的......。

关于。"我从下一个条形图的第一个刻度开始使用,当时它已经被锁定。这就是为什么我需要在第一个刻度上知道前一个柱子的情况。" 而我真的想知道,我们是否可以用

doubleiCustom( ....int shift)

全知全能的帮助说

移位 - 从指标缓冲区获得的数值的索引(相对于当前条形图,向后移动指定的周期数)。

我想知道你是否可以这样写(我自己也想知道)。

for (i=0; i<limit;i++){

如果(iCustom(NULL, 0, "sidus_v.2", 3,1)<0 && iCustom(NULL, 0, "sidus_v.2", 3,0)>0)

....

作为ooooovery智者论坛的参与者不太可能屈尊于这两个小家伙,让他们自己去提高技能,因为这可能会派上用场。

不可以 =(

废话,那么如何解决这个问题呢?好吧,既然你已经提出来了:https://www.mql5.com/ru/forum/117268,我们将继续关注它=)

 
vtoroe_dyxanie писал(а)>>

没有办法 =(

人,那么你如何解决这个问题呢?好吧,既然你已经开始了一个主题:"如何从EA中找出方向", 我们会继续关注的=)

>>我将为公司做一些追踪工作!?)

 
vtoroe_dyxanie писал(а)>>

没有办法 =(

人,那么你如何解决这个问题呢?好吧,既然你已经开始了一个主题:"如何从EA中知道方向", 我们会继续关注的=)

>> 嘿!记得我向你寻求帮助吗?如果不难,你能告诉我更多吗?你为我做的就是我现在写的(我想让指标在一个窗口中显示最接近的时间段),这是????

附加的文件:
test1.mq4  6 kb