ヘルプが必要です

 

他のEAやIndisのコードを参考にしながら、自分のストラテジーに基づいたEAを作ろうとしているのですが、今ひとつ行き詰まりを感じています。

(user defined lot sizes for each trade)

extern string LotsProgression="0.1;0.1;0.2;0.3;0.4;0.6;0.8;1.1;1.5;2.0;2.7;3.6;4.7;6.2;8.0;10.2;13.0;16.5;20.8;26.3;33.1;41.6;52.2;65.5;82.5;103.9;130.9;165;207.9;262;330.1;416;524.7;661.1";

extern bool RestartNewCycle = true;

(and the code)

int init()

{

int i,j,k;

string ls;

while (true) {

        j=StringFind(LotsProgression,";",i);

        if (j>0) {

                ls=StringSubstr(LotsProgression,i,j-i);

                i=j+1;

                k++;

                ArrayResize(lots,k);

                lots[k-1]=StrToDouble(ls);

        } else {

                ls=StringSubstr(LotsProgression,i);

                k++;

                ArrayResize(lots,k);

                lots[k-1]=StrToDouble(ls);

                break;

        }

}



plen=ArraySize(lots);

}

このロジックが何なのか、理解できないのです。

追記:友人が私のストラテジーを気に入ってくれて、このEAを作りました。しかし、私は両方(EAとそのコーダーの友人の連絡先)を失ったので、今、私はこのストラテジーをもう一度コード化したいので、私の非常に基本的なコーディング知識をテストしようとしているのです。

 
qgmql:

他のEAやIndis.のコードを参考にしながら、自分のストラテジーに基づいたEAを作ろうとしているのですが、今ひとつ行き詰まりを感じています。

<削除された>。


コードを投稿するにはSRCボタンを 使用してください.. .
 
qgmql: この理屈が理解できないし、実際どうなんだろう。

extern string LotsProgression="0.1;0.1;0.2;0.3 ...

double lots[];     // [0]=0.1 [1]=0.1 [2]=0.2 [3]=0.3 [34]=661.1
int    plen;       // 35
int init(){ ... }

文字列をセミコロンで分割し、部分文字列をdoubleに変換し、動的配列に値を格納して います。
 

あなたが言ったことは大丈夫です。問題は残りのコードにあります。私は2つのエラーを受け取ります(新しいメタエディタにおいてのみ)。

'init' - function can be declared only in the global scope

and

'init' - function already defined and has body
 
qgmql:

あなたが言ったことは大丈夫です。問題は残りのコードにあります。私は2つのエラーを受け取ります(新しいメタエディタにおいてのみ)。

init()を別の関数 内で宣言し、それを2回目に定義しているようです ... ...
 

そうですね、修正しました。現在、タイムフレームのコードでエラーが発生しています。

   //--- EA PARAMETERS
extern int      EA_TF=240;
extern bool     Forced_TF=True;


bool   TF;

     if(Forced_TF != True) TF = EA_TF;     //These two lines i think, have error.
     else TF = Period();                   //New metaeditor is not accepting "TF = EA_TF;" from above line.

Forced_TFがtrueの場合、(EAを置いた)アクティブなチャートが別のタイムフレームで開かれていても、EAはそのタイムフレームだけで取引しシグナルを取得する必要があります。もしFalseなら、どのタイムフレームでも動作するはずです。

 
qgmql:

そうですね、修正しました。現在、タイムフレームのコードでエラーが発生しています。

Forced_TFがtrueの場合、(EAを置いた)アクティブなチャートが別のタイムフレームで開かれていても、EAはそのタイムフレームだけで取引しシグナルを取得する必要があります。falseを指定すると、どのタイムフレームでも動作するようになります。

TFをboolとして持って いるが、intに 設定しようとしている ... これを試してください ...

   //--- EA PARAMETERS
extern int      EA_TF=240;
extern bool     Forced_TF=True;


int   TF;

     if(!Forced_TF) TF = EA_TF;     //These two lines i think, have error. 
     else TF = Period();            //New metaeditor is not accepting "TF = EA_TF;" from above line.
 
すべてのコードを掲載するか、少なくとも切り捨てを示してください。そのIF/ELSEは関数 内でなければなりません。
 

古いエディタではすべてOKでしたが、新しいエディタではエラー行の後のコードで引用された警告がまだ出ています。

//+------------------------------------------------------------------+
//|                                                   01Multi_EA.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property version   "1.00"
#property strict

//--- input parameters
input int      EA_TF=60;
input bool     Forced_TF=True;
input int      MagicNumber=12345;
input int      FastMA_Period=5;
input int      FastMA_Shift=0;
input int      FastMA_Method=1;
input int      FastMA_Price=0;
input int      SlowMA_Period=34;
input int      SlowMA_Shift=0;
input int      SlowMA_Method=1;
input int      SlowMA_Price=0;
input string   LotsProgression="0.01;0.02;0.03;0.04;0.05;0.06;0.07;0.08;0.09;0.10;0.11;0.12;0.13;0.14;0.15;0.16;0.17;0.18;0.19;0.20";
input bool     NewCycle=True;
input int      Limit_TP=50;
input bool     Use_TP=False;
input int      Limit_SL=50;
input bool     Use_SL=False;
input int      MaxSlippage=3;
input int      OrderTries=10;

int      TF, Plen;
double   TP, SL, pips2dbl, pips2point, pipValue, Slippage, Lots[];
         
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//----
 if(Forced_TF != True) TF = EA_TF;
      else TF = Period();
   int i,j,k;
   string ls;
   while (true) {
        j=StringFind(LotsProgression,";",i);
        if(j>0) {
                ls=StringSubstr(LotsProgression,i,j-i);    // <<<<<"possible use of uninitialized variable 'i'	01Multi_EA.mq4	46	38">>>>>

                i=j+1;
                k++;
                ArrayResize(Lots,k);
                Lots[k-1]=StrToDouble(ls);
        } else {
                ls=StringSubstr(LotsProgression,i);
                k++;
                ArrayResize(Lots,k);
                Lots[k-1]=StrToDouble(ls);
                break;
        }
   }


   Comment("Copyright © 2004, MetaQuotes Software Corp.");
   
   if (Digits == 5 || Digits == 3)
   {            
      pips2dbl = Point*10; pips2point = 10; pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*10;
   } 
   else 
   {    
      pips2dbl = Point;   pips2point = 1; pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*1;
   }
   
   Slippage = pips2dbl*MaxSlippage;
   TP = pips2dbl*Limit_TP;
   SL = pips2dbl*Limit_SL;
   
//----
   return(INIT_SUCCEEDED);
  }

WHRoeder コード全体を貼り付けました。

 
qgmql:

古いエディタではすべてOKでしたが、新しいエディタではエラー行の後のコードで引用された警告がまだ出ています。

WHRoeder コード全体を貼り付けました。

これはエラーではなく、警告です ... 警告を消すには、変数を単に宣言するのではなく、初期化します。 mql4では変数を宣言すると初期化されましたが、mql4.5では明示的に初期化する必要があります ... ...

int i = 0, j, k;   //  i initialised to 0
 
pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*10;
tickvalue を単独で使用しないでくださいhttps://www.mql5.com/en/forum/133792/page3#512466
理由: