さようならロボット - こんにちはマラスムス - ページ 5

 
次のことを提案します:インジケータ(変更なしで以前動作していたもの)をここか私の個人的なメッセージに添付すれば、私はそれを修正します。
 
Pavlick:
私は次のことを提案します:インジケータ(変更なしで以前動作したバリアント)をここまたは私の個人的なメッセージに添付してください、私はそれを修正します。

Pavlikさん、こんにちは。

それがバージョンです。

のオリジナルです。

コードをドラッグしてみる

パンサー

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

//| AltrTrend_Signal_v2_2.mq4

//| ラムダス - 変換のみ

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

#property copyright "著者 - 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

//---- 入力パラメータ

extern int K=30;

extern double Kstop=0.5;

extern inttern Kperiod=150;

extern inttern PerADX=14;

extern inttern CountBars=350;

extern intON=1; //ザックトンズ

//---- バッファ

double val1[]。

double val2[]。

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

//| カスタムインジケータ初期化関数

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

int init()

{

文字列の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()

{

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);

//---- 初期値ゼロ

if(counted_bars<PerADX+1)とする。

{

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

for(i=1;i<=PerADX;i++) val2[CountBars-i]=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のコード

if ((シフト==0) && (サウンドオン==1)){。

if (val1[0] > 0) PlaySound("ReadyToExit.wav")を実行。

}

if ((シフト==0) && (サウンドオン==1)){。

if (val2[0] > 0) PlaySound("ReadyToExit.wav")を実行。

}

}

return(0)です。

}

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

Pavlikさん、こんにちは。

それがバージョンです。

のオリジナルです。

コードをドラッグしてみる

パンサー


Sr.パンサ!なぜSRC ボタンを使わないのですか?Así mejor o Ud. tiene alguna duda?

//+------------------------------------------------------------------+
//| 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);
  }
//+--------------------------------------------------------

Buena suerte!

 
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さん、こんにちは。

あなたのコードをインストールしました。

完璧に動作します!

あなたは素晴らしい才能の持ち主です。

壁を突き破った!?

素晴らしい仕事です。

を、信頼性の高い信号と

新たな地平を切り開く

今日はなんていい日なんだ

インテージに特別な感謝を捧げたい。

選手招集の台本を書いたのは彼だ!

しかし、才能のある人、優秀な人はいるものです。

クドカン!

今日は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);
}


このエディターは、C言語の標準的で合法的で一般的な構成に対して、「'a'の宣言は4行目でグローバル宣言を隠す」、「'b'の宣言は4行目でグローバル宣言を隠す」という警告を発生させますが、関数内に新しい変数の宣言も、変数の重複を示唆するものもないので、本質的に間違っており無識なのです。

その結果、それほど大きくないプログラムコードでも、数百もの不適切な警告が発生してしまうのです。

 
Vinin:


インジケータは動作するが、開発者がその中で論理的なミスを犯した


Vininさん、こんにちは。

AltrTrend_Signal_v2_2.mq4 を確認しました

で、論理エラーを発見

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

最後に1という下線が入っていますね

は、どうあるべきだと思いますか?

パンサー