再见,机器人--你好,沼泽地。 - 页 5

 
我建议如下:在这里或在我的私人信息中附上指标(以前工作的指标,没有改动),我将予以纠正。
 
Pavlick:
我建议如下:在这里或在我的私人信息中附上指标(以前工作的变体,没有改动),我将对其进行修正。

嗨,Pavlik!

这就是版本。

原始的。

尝试拖动代码

豆瓣酱

//+------------------------------------------------------------------+

//| AltrTrend_Signal_v2_2.mq4

//|Ramdass - 仅限转换

//+------------------------------------------------------------------+

#财产版权 "作者 - OlegVS, GOODMAN"

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Chartreuse

#property indicator_color2 黄色

#property indicator_width1 2

#property indicator_width2 2

//---- 输入参数

外部int K=30。

外置双Kstop=0.5。

外在的,内在的,Kperiod=150。

外来的PerADX=14。

外在的CountBars=350。

外来的intON=1; //zakton的

//---- 缓冲区

double val1[];

double val2[];

//+------------------------------------------------------------------+

//|自定义指标初始化功能

//+------------------------------------------------------------------+

int init()

{

string short_name;

//----指标线

IndicatorBuffers(2)。

SetIndexStyle(0,DRAW_ARROW)。

SetIndexArrow(0,159);

SetIndexStyle(1,DRAW_ARROW)。

SetIndexArrow(1,159);

SetIndexBuffer(0,val1)。

SetIndexBuffer(1,val2)。

//----

return(0);

}

//+------------------------------------------------------------------+

//| AltrTrend_Signal_v2_2|

//+------------------------------------------------------------------+

int start()

{

如果(CountBars>=Bars) CountBars=Bars。

SetIndexDrawBegin(0,Bars-CountBars+PerADX)。

SetIndexDrawBegin(1,Bars-CountBars+PerADX)。

int i,shift,counted_bars=IndicatorCounted()。

int i1,i2;

double Range,AvgRange,smin,smax,ssMax,ssMin,SSP,price;

bool uptrend,old;

//----

if(Bars<=PerADX+1) return(0);

//---- 初始零点

如果(counted_bars<PerADX+1)

{

for(i=1;i<=PerADX;i++) val1[CountBars-i]=0.0;

for(i=1;i<=PerADX;i++) val2[CountBars-i]=0.0;

}

//----

for (shift = CountBars-PerADX; shift>=0; shift--)

{

SSP=MathCeil(Kperiod/iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,1)) 。

范围=0。

平均范围=0。

for (i1=shift; i1<=shift+SSP; i1++)

{AvgRange=AvgRange+MathAbs (High[i1]-Low[i1])。

}

范围=AvgRange/(SSP+1)。

SsMax=High[shift]; SsMin=Low[shift]。

for (i2=shift;i2<=shift+SSP-1;i2++)

{

价格=高[i2]。

如果(SsMax<price) SsMax=price。

price=Low[i2];

如果(SsMin>=price) SsMin=price

}

smin = SsMin+(SsMax-SsMin)*K/100。

smax = SsMax-(SsMax-SsMin)*K/100。

val1[shift]=0。

val2[shift]=0。

如果(Close[shift]<smin)

{

uptrend = false。

}

如果(Close[shift]>smax)

{

上升趋势 =真。

}

if (uptrend!=old && uptrend=true) {val1[shift]=Low[shift]-Range*Kstop;}.

if (uptrend!=old && uptrend==false) {val2[shift]=High[shift]+Range*Kstop;}.

old=uptrend。

// zakton的代码

如果((shift == 0) && (SoundON == 1)) {

如果(val1[0] > 0)PlaySound("ReadyToExit.wav")。

}

如果((shift == 0) && (SoundON == 1)) {

如果(val2[0]>0)PlaySound("ReadyToExit.wav")。

}

}

return(0);

}

//+--------------------------------------------------------
 
pansa:

嗨,Pavlik!

这就是版本。

原始的。

尝试拖动代码

豆瓣酱


尊敬的女士们、先生们潘萨!为什么不使用SRC 按钮来输入密码?你有什么疑问吗?

//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2.mq4
//| Ramdass - Conversion only
//+------------------------------------------------------------------+
#property  copyright "Author - OlegVS, GOODMAN"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Chartreuse
#property indicator_color2 Yellow
#property indicator_width1 2
#property indicator_width2 2
//---- input parameters
extern int K=30;
extern double Kstop=0.5;
extern int Kperiod=150;
extern int PerADX=14;
extern int CountBars=350;
extern int SoundON=1; //zakton's
//---- buffers
double val1[];
double val2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,159);
   SetIndexBuffer(0,val1);
   SetIndexBuffer(1,val2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2                                            |
//+------------------------------------------------------------------+
int start()
  {  
   if (CountBars>=Bars) CountBars=Bars;
   SetIndexDrawBegin(0,Bars-CountBars+PerADX);
   SetIndexDrawBegin(1,Bars-CountBars+PerADX);
   int i,shift,counted_bars=IndicatorCounted();
   int i1,i2;
   double Range,AvgRange,smin,smax,SsMax,SsMin,SSP,price;
   bool uptrend,old;
//----
   if(Bars<=PerADX+1) return(0);
//---- initial zero
   if(counted_bars<PerADX+1)
   {
      for(i=1;i<=PerADX;i++) val1[CountBars-i]=0.0;
      for(i=1;i<=PerADX;i++) val2[CountBars-i]=0.0;
   }
//----
for (shift = CountBars-PerADX; shift>=0; shift--)
{
SSP=MathCeil(Kperiod/iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,1));
                Range=0;
                AvgRange=0;
                for (i1=shift; i1<=shift+SSP; i1++)
                               {AvgRange=AvgRange+MathAbs(High[i1]-Low[i1]);
                               }
                Range=AvgRange/(SSP+1);
SsMax=High[shift]; SsMin=Low[shift];
   for (i2=shift;i2<=shift+SSP-1;i2++)
        {
         price=High[i2];
         if(SsMax<price) SsMax=price;
         price=Low[i2];
         if(SsMin>=price)  SsMin=price;
        }
smin = SsMin+(SsMax-SsMin)*K/100;
smax = SsMax-(SsMax-SsMin)*K/100;
                val1[shift]=0;
                val2[shift]=0;
                if (Close[shift]<smin)
                               {
                               uptrend = false;
                               }
                if (Close[shift]>smax)
                               {
                               uptrend = true;
                               }
   if (uptrend!=old && uptrend==true) {val1[shift]=Low[shift]-Range*Kstop;}
   if (uptrend!=old && uptrend==false) {val2[shift]=High[shift]+Range*Kstop;}
   old=uptrend;
// zakton's code  
   if ((shift == 0) && (SoundON == 1)) {
      if (val1[0] > 0) PlaySound("ReadyToExit.wav");
   }
   if ((shift == 0) && (SoundON == 1)) {
      if (val2[0] > 0) PlaySound("ReadyToExit.wav");
   }
}
   return(0);
  }
//+--------------------------------------------------------

祝您好运!

 
pansa:

嗨,Pavlik!

这就是版本。

原始的。

尝试拖动代码

豆瓣酱




该指标可以使用,但开发者在其中犯了一个逻辑错误

SSP=MathCeil(Kperiod/iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,1));
 
//+------------------------------------------------------------------+
//|                                        sample_execute_script.mq4 |
//+------------------------------------------------------------------+
#import "user32.dll"
  int RegisterWindowMessageW(string MessageName);
  int PostMessageW(int hwnd, int msg, int wparam, string Name);
  void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo);


#import

int start()
{
  int winHandle = WindowHandle( Symbol(), Period() );
//
//
//
  if(signal < 0 && trigl==true && buy == true) 
  {
    StartScript(winHandle, "SchliesenProfitOrders" ); 
  }
//
//
//
}
void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)
{
  int MessageNumber = RegisterWindowMessageW("MetaTrader4_Internal_Message");
  PostMessageW(hWnd, MessageNumber, 16, ScriptName);
  if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }
} 
void ClearConfigDialog()
{
  Sleep(100);
  keybd_event(13, 0, 0, 0);
}
//
//
//
return(0);
这就是罗氏所谈论的内容
 

好吗?

//+------------------------------------------------------------------+
//|                                             AltrTREND_Signal.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                                 AltrTrend_Signal_v2_2_alert.mq4  |
//|                                       Ramdass - Conversion only  |
//+------------------------------------------------------------------+
#property  copyright "Author - OlegVS, GOODMAN"
#property strict
#import "user32.dll"
  int RegisterWindowMessageA(uchar &lParam[]);
  int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
  void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo);
#import

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DeepSkyBlue
#property indicator_color2 OrangeRed
#property indicator_width1 1
#property indicator_width2 1

//---- input parameters
extern bool Alert_message = true;
extern int  Time_alert_minutes = 60; // ????? ????? ?????????? ???? ??? ? 60 ?????.
extern int K = 30;
extern double Kstop = 0.5;
extern int Kperiod = 150;
extern int PeriodADX = 7;//14;
extern int CountBars = 100;
extern string script_name = "fPlayer";

//---- buffers
double val1[];
double val2[];

double AlertTime;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
    //---- indicator line
    IndicatorBuffers(1);
    SetIndexStyle(0,DRAW_ARROW);
    SetIndexArrow(0,241);
    IndicatorBuffers(2);
    SetIndexStyle(1,DRAW_ARROW);
    SetIndexArrow(1,242);
    SetIndexBuffer(0,val1);
    SetIndexBuffer(1,val2);
    if(CountBars>=Bars) 
        CountBars=Bars;
    SetIndexDrawBegin(0, Bars - CountBars + PeriodADX );
    SetIndexDrawBegin(1, Bars - CountBars + PeriodADX );
    //----
    return(0);
  }
  
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2                                            |
//+------------------------------------------------------------------+
int start()
{   
    int shift, counted_bars = IndicatorCounted();
    //---- 
    if(counted_bars<0) return(-1);
    //---- 
    int i1, i2, t_per;
    double Range, AvgRange, smin, smax, SsMax, SsMin, SSP, price;
    bool uptrend, old;
    //----
    if(Bars <=PeriodADX  + 1) 
        return(0);
    //----
    for(shift = CountBars - PeriodADX ; shift >= 0; shift--) 
    { 
        SSP = MathCeil(Kperiod / iADX(NULL, 0, PeriodADX , PRICE_CLOSE, MODE_MAIN, 1));
        Range = 0;
        AvgRange = 0;
        for(i1 = shift; i1 <= shift + SSP; i1++)
        {
            AvgRange = AvgRange + MathAbs(High[i1] - Low[i1]);
        }
        Range = AvgRange / (SSP + 1);
        //----
        SsMax = High[shift]; 
        SsMin = Low[shift]; 
        for(i2 = shift; i2 <= shift + SSP - 1; i2++)
        {
            price = High[i2];
            if(SsMax < price) 
                SsMax = price;
            price = Low[i2];
            if(SsMin >= price)  
                SsMin = price;
        }
        //----
        smin = SsMin + (SsMax - SsMin)*K / 100; 
        smax = SsMax - (SsMax - SsMin)*K / 100; 
        val1[shift] = 0.0;
        val2[shift] = 0.0;
        if(Close[shift] < smin)
        {
            uptrend = false;
        }
        if(Close[shift] > smax)
        {
            uptrend = true;
        }
        if(uptrend != old && uptrend == true) 
        {
            val1[shift] = Low[shift] - Range*Kstop;
        }
        if(uptrend != old && uptrend == false) 
        {
            val2[shift] = High[shift] + Range*Kstop;
        }
        old = uptrend;
    }  
    
//---- Alert
    if (Period()<Time_alert_minutes) t_per=Period(); else t_per=Time_alert_minutes; // ???? ??<Time_alert, ????? ????? ?????????? ???? ??? ? ??.
    if (Alert_message==true && CurTime()>AlertTime && val1[0]!=0.0)
    { 
        Alert(Symbol()," +++  BUY !!! +++" , "  //AltrTrend_Signal_v2_2_alert");
        AlertTime=CurTime() + (t_per - MathMod(TimeMinute(CurTime()), t_per))*60;
        //PlaySound("payment.wav");
        int winHandle = WindowHandle( Symbol(), Period() );
        StartScript(winHandle, script_name);
    }
    if (Alert_message==true && CurTime()>AlertTime && val2[0]!=0.0)
    { 
        Alert(Symbol()," +++  SELL !!!   +++" , "  //AltrTrend_Signal_v2_2_alert");
        AlertTime=CurTime() + (t_per - MathMod(TimeMinute(CurTime()), t_per))*60;
        // PlaySound("payment.wav");
        int winHandle = WindowHandle( Symbol(), Period() );
        StartScript(winHandle, script_name);
    }

    return(0);
}

void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)
{
    char buf[];
    StringToCharArray("MetaTrader4_Internal_Message", buf);
    int MT4InternalMsg = RegisterWindowMessageA(buf);
    StringToCharArray(ScriptName, buf);
    SendMessageA(hWnd, MT4InternalMsg, 16, buf);
    if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }
}

void ClearConfigDialog()
{
    Sleep(100);
    keybd_event(13, 0, 0, 0);
} 

//+------------------------------------------------------------------+
 
Pavlick:

好吗?


嗨,Pavlik!

安装了你的代码-

它的效果非常好!

你是一个伟大的人才 -

你已经突破了墙!

伟大的工作 -

现在可靠的信号和

? 新的视野! ?

今天是个好日子啊!

我想特别感谢Integer。

他写了玩家呼叫脚本!

不过,也有人才和好人。

为你点赞!

今天是9/11/14!

潘萨

 
Andrei01:

我的大多数垃圾警告都是因为一个完全合法、正确和标准的变量通过引用传递到一个函数中而产生的,当时函数的模板名称与变量本身重合,因为在标准和典型的使用中,这个结构中的变量本身应该是以自己的名字传递到函数中。

请举例说明。

不幸的是,主持人无法对此给出一个称职的、符合逻辑的解释,因为据说有时在其他结构中,当有类似的名字时,有人可能会产生误解。

如果我没有理解错的话,这个答案既符合逻辑又正确,而且是在几十年的持续编程中学习到的。


很抱歉不小心删除了评论--我点击了错误的地方,而且没有任何功能可以恢复它。

 
Renat:

请给我一个例子。

如果我没有理解错的话,这个答案既符合逻辑又正确,而且是在连续几十年的编程中遭受的。


//--------------------------------------------------------------------
#property indicator_chart_window
//--------------------------------------------------------------------
int a=1,b=2;
//--------------------------------------------------------------------
void start(){        
        int k=sum(a,b);
        Alert(k);
}
//--------------------------------------------------------------------
int sum(int& a, int& b){        
        return(a+b);
}


编辑器产生了"'a'的声明在第4行隐藏了全局声明 "和"'b'的声明在第4行隐藏了全局声明 "的警告,根据C语言的标准,这也是不正确的,从本质上来说是文盲,因为在一个函数里面既没有声明一个新变量,也没有暗示任何可能的变量重叠。

结果是,即使在一个不太大的程序代码中也有数百个不恰当的警告。

 
Vinin:


该指标是有效的,但开发者在其中犯了一个逻辑错误


嗨,维宁!

你检查了指标 AltrTrend_Signal_v2_2.mq4

并发现了一个逻辑错误

公式 SSP=MathCeil (Kperiod/iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,1))

你在结尾处强调了1

你认为它应该是什么?

豆瓣酱