Hilfe benötigt

 

Ich versuche, einen EA auf der Grundlage meiner eigenen Strategie zu codieren, mit Hilfe von Code aus einigen anderen EAs und indis. aber jetzt in einer Sache stecken.

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

}

Ich bin nicht in der Lage, diese Logik zu verstehen oder was es eigentlich ist.

PS: Ein Freund mochte meine Strategie und erstellte diesen EA. Aber ich habe beides verloren (den EA und den Kontakt zu diesem Programmierer), so dass ich jetzt versuche, meine grundlegenden Programmierkenntnisse zu testen, da ich diese Strategie unbedingt wieder programmieren möchte.

 
qgmql:

Ich versuche einen EA zu programmieren, der auf meiner eigenen Strategie basiert, mit Hilfe von Code aus einigen anderen EAs und Indis. aber jetzt in einer Sache stecken.

<entfernt>


Bitte verwenden Sie die SRC-Schaltfläche, um den Code zu posten. . .
 
qgmql: Ich kann diese Logik nicht nachvollziehen und weiß nicht, was sie eigentlich ist.

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

Teilt die Zeichenkette an den Semikolons auf, wandelt die Teilstrings in Doubles um und speichert die Werte in das dynamische Array.
 

Die Sache, die Sie erwähnt ist ok. Problem ist in den Rest des Codes. Ich bekomme zwei Fehler (nur im neuen Meta-Editor).

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

and

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

Die Sache, die Sie erwähnt ist ok. Problem ist in den Rest des Codes. Ich bekomme zwei Fehler (nur im neuen Meta-Editor).

Klingt so, als hätten Sie init() innerhalb einer anderen Funktion deklariert und diese dann ein zweites Mal definiert.
 

Ja, ich habe das verstanden und korrigiert. Jetzt bekommen Fehler in timeframe Code.

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

Wenn Forced_TF wahr ist, dann EA sollte Handel und sollte Signale von genannten Zeitrahmen nur erhalten, auch wenn aktive Chart (auf die ich EA platzieren) in anderen Zeitrahmen geöffnet ist. Wenn der Wert false, dann sollte es auf jedem timeframe arbeiten.

 
qgmql:

Ja, ich habe das verstanden und korrigiert. Jetzt bekommen Fehler in timeframe Code.

Wenn Forced_TF wahr ist, dann EA sollte Handel und sollte Signale von genannten Zeitrahmen nur erhalten, auch wenn aktive Chart (auf die ich EA platzieren) in anderen Zeitrahmen geöffnet ist. Wenn Wert false, dann sollte es auf jedem Zeitrahmen arbeiten.

Sie haben TF als bool . .. aber Sie versuchen, es auf eine int zu setzen ... versuchen Sie dies ...

   //--- 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.
 
Stellen Sie den gesamten Code ein oder geben Sie zumindest die Kürzung an. Das IF/ELSE muss innerhalb einer Funktion stehen.
 

@RaptorUK Ich habe Sie. und wieder alles ok mit altem Editor, aber neuer Editor gibt immer noch eine Warnung, zitiert im Code nach Fehlerzeile,

//+------------------------------------------------------------------+
//|                                                   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 Habe den ganzen Code eingefügt.

 
qgmql:

@RaptorUK Ich habe Sie. und wieder alles ok mit altem Editor, aber neuer Editor gibt immer noch eine Warnung, zitiert im Code nach Fehlerzeile,

@WHRoeder Habe den ganzen Code eingefügt.

Es ist kein Fehler, es ist eine Warnung ... um die Warnung loszuwerden, initialisieren Sie die Variable, anstatt sie nur zu deklarieren. In mql4 wurde eine Variable beim Deklarieren auch initialisiert, in mql4.5 muss man die Variable explizit initialisieren, wenn man das will...

int i = 0, j, k;   //  i initialised to 0
 
pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*10;
Verwenden Sie tickvalue nicht allein https://www.mql5.com/en/forum/133792/page3#512466
Grund der Beschwerde: