도움이 필요합니다

 

다른 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(){ ... }

세미콜론에서 문자열을 분할하고 하위 문자열을 이중으로 변환하고 값을 동적 배열에 저장 합니다.
 

말씀하신 부분은 괜찮습니다. 문제는 나머지 코드에 있습니다. 두 개의 오류가 발생합니다(새 메타에디터에서만).

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

and

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

말씀하신 부분은 괜찮습니다. 문제는 나머지 코드에 있습니다. 두 개의 오류가 발생합니다(새 메타에디터에서만).

다른 함수 내에서 init() 을 선언한 다음 두 번째로 정의한 것처럼 들립니다. . .
 

네 확인하고 수정했습니다. 이제 타임프레임 코드에서 오류가 발생합니다.

   //--- 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는 함수 안에 있어야 합니다.
 

@RaptorUK 잡았습니다. 그리고 다시 이전 편집기에서는 모든 것이 정상이지만 새 편집기에서는 여전히 오류 행 다음 코드에서 인용된 하나의 경고를 표시합니다.

 //+------------------------------------------------------------------+
//|                                                   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 :

@RaptorUK 잡았습니다. 그리고 다시 이전 편집기에서는 모든 것이 정상이지만 새 편집기에서는 여전히 오류 행 다음 코드에서 인용된 하나의 경고를 표시합니다.

@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
사유: