Alguma ajuda necessária

 

Estou tentando codificar um EA baseado em minha própria estratégia, com a ajuda do código de alguns outros EAs e indis. mas agora preso em uma coisa.

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

}

Sou incapaz de entender esta lógica ou o que realmente é.

PS: Um amigo gostou da minha estratégia e criou esta EA. Mas eu perdi ambos (EA e o contato daquele amigo codificador) e agora estou tentando testar meus conhecimentos básicos de codificação, pois eu realmente quero que esta estratégia seja codificada novamente.

 
qgmql:

Estou tentando codificar um EA baseado em minha própria estratégia, com a ajuda do código de alguns outros EAs e indis. mas agora preso em uma coisa.

<removido>


Por favor, use o botão SRC para postar o código . . .
 
qgmql: Sou incapaz de entender esta lógica ou o que realmente é.

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

Divide o fio nos ponto-e-vírgula, converte os substratos em duplas e armazena valores na matriz dinâmica.
 

O que você mencionou está bem. O problema está no resto do código. Eu recebo dois erros (apenas no novo metaeditor).

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

and

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

O que você mencionou está bem. O problema está no resto do código. Eu recebo dois erros (apenas no novo metaeditor).

Parece que você declarou init() dentro de outra função e depois a definiu uma segunda vez . .
 

sim, eu entendi e corrigi isso. Agora recebendo erro no código de tempo.

   //--- 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.

Se Forced_TF for verdade, então a EA deve negociar e deve receber sinais apenas do prazo mencionado, mesmo que o gráfico ativo (no qual eu coloco a EA) seja aberto em um prazo diferente. Se o valor for falso, então ele deve funcionar em qualquer período de tempo.

 
qgmql:

sim, eu entendi e corrigi isso. Agora recebendo erro no código de tempo.

Se Forced_TF for verdade, então a EA deve negociar e deve receber sinais apenas do prazo mencionado, mesmo que o gráfico ativo (no qual eu coloco a EA) seja aberto em um prazo diferente. Se o valor for falso, então ele deve funcionar em qualquer período de tempo.

Você tem o TF como um bool . . .. mas você está tentando configurá-lo para um int. ... tente isto . ...

   //--- 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.
 
Afixe TODO o código ou pelo menos indique a truncagem. Que IF/ELSE deve estar dentro de uma função.
 

@RaptorUK Eu tenho você. e novamente tudo bem com o antigo editor, mas o novo editor ainda dá um aviso, citado em código após a linha de erro,

//+------------------------------------------------------------------+
//|                                                   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 Colou o código inteiro.

 
qgmql:

@RaptorUK Eu tenho você. e novamente tudo bem com o antigo editor, mas o novo editor ainda dá um aviso, citado em código após a linha de erro,

@WHRoeder Colou o código inteiro.

Não é um erro, é um aviso . . . para se livrar do aviso inicializar a variável em vez de apenas declará-la. Em mql4 quando você declarou uma variável, ela também foi inicializada, agora com mql4,5 você tem que inicializar explicitamente a variável se você quiser . . .

int i = 0, j, k;   //  i initialised to 0
 
pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*10;
Não use o tickvalue por si só https://www.mql5.com/en/forum/133792/page3#512466
Razão: