[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 627

 
chief2000:

Ersetzte "return(0)" durch "return", aber dies löste das "Problem" nicht - nach der Optimierung sieht man immer noch die gleichen 0-Null-Ergebnisse. Gibt es eine Lösung, um bei der Optimierung keine Nullen auszugeben?

Danke!


Ich weiß nicht, ob Sie das tun, aber ich sage Ihnen, dass Sie auf jeden Fall das Kontrollkästchen "Unbrauchbare Ergebnisse ignorieren" aktivieren sollten.

Die Minus-Ergebnisse (per Saldo) werden eliminiert, bei den Nullen bin ich mir nicht sicher, aber probieren Sie es aus.

 
Ich frage mich, wie man bei jedem neuen Tick eine "zufällige" Zahl innerhalb von, sagen wir, 15 +/- 7 erhält, so dass sie innerhalb der vorgegebenen Grenzen zufällig erzeugt wird ...
 

Zum Beispiel so:

int random(){
   MathSrand(TimeLocal());
   while(true){
      int x = MathRand();
      if(x >= 8 && x <= 22)return(x);
   }
}

:)

 
ToLik_SRGV:

Zum Beispiel so:

:)

Ich danke Ihnen!!! ;)
 
ToLik_SRGV:

Ich weiß nicht, ob Sie das wissen, aber setzen Sie vorsichtshalber ein Häkchen bei "Unbrauchbare Ergebnisse überspringen".

Die negativen Ergebnisse (per Saldo) werden herausgefiltert, bei den ungültigen bin ich mir nicht sicher, aber Sie sollten es versuchen.

Die Sache ist die, dass ich Nullergebnisse sehen möchte - in den frühen Phasen der Optimierung muss ich oft die besten unter den Nullergebnissen auswählen (und in späteren Phasen ist es nützlich, sie durchzusehen und zu vergleichen). Nullen stören, weil genau diese Ergebnisse keinen Sinn ergeben und es zu viele von ihnen gibt - die Größe der gespeicherten Dateien wird größer und behindert die Anzeige der Ergebnisse optisch. Trotzdem vielen Dank!

 
granit77:

Wenn Sie die externen Variablen MA_Fast_Period und MA_Slow_Period meinen, gibt es eine Lösung. Wenn die Variablen im Expert Advisor berechnet werden, ist nichts weiter zu tun.

Es ist spät, mein Kopf arbeitet nicht mehr... aber es klingt nach einer sehr guten Idee! Ich danke Ihnen!

 
artmedia70:
Ich frage mich, wie man bei jedem neuen Tick eine "zufällige" Zahl innerhalb von, sagen wir, 15 +/- 7 erhält, so dass sie innerhalb der vorgegebenen Grenzen zufällig erzeugt wird ...
http://prolang.ru/index.php/cpp/cpptheory/3-clang-random.html

Um reelle Zufallszahlen mit Gleichverteilung im Intervall [a,b] zu erhalten, verwenden Sie die Formel

x = rand()*(b-a)/RAND_MAX + a;

Für mql steht in der Beschreibung der Funktion MathRand(): Die Funktion gibt eine pseudozufällige ganze Zahl im Bereich von 0 bis 32767 zurück

d.h. für mql RAND_MAX = 32767

 

Ich begann, mq4 zu lernen, und stieß sofort auf einige obskure Momente.

Ich habe mich sozusagen selbst daran versucht. Ich habe einen einfachen Expert Advisor für Ma. Aber sie will nicht einmal mit der Geschichte handeln. Er erzeugt keine Fehler.

Können Sie mir sagen, wo ich einen Fehler gemacht habe?

int start()
  {
   //---проверим возможность входа в позицию
   bool flagchange = false;
   int Slippage = 3;
   int i = 0;
   double lt = getLots() ; // минимальный лот
   RefreshRates();
   int total = OrdersTotal();   
   int ticket = -1;
   for (;;)
      {
      int flag= GetEma();
       if (flagchange != flag) // проверим, сигнал ема изменился? если да, то можно открыть или закрыть поз.
       flagchange = true;      // изменился!
       else flagchange = false;
        if (flagchange == True)
        {       
           int Total=OrdersTotal(); //проверим есть открытые позиции?
           if(Total>0)
  {
     for(i=Total-1; i>=0; i--) 
     {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) // если а то закрываем
        {
           if(OrderType()==OP_BUY || OrderType()==OP_SELL) // Только Buy и Sell
           {
              if(OrderType()==OP_BUY) 
              bool Result=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);
              else
              Result=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE);
              if(Result!=true) 
              { 
              Print("LastError = ",GetLastError()); 
              }
           }
        }
        else // если открытых нет, то окрываем.
         if (flag ==1) OrderSend(Symbol(),OP_BUY,lt,Ask,Slippage,Bid - sl * Point,0,"Buy",888,0,Blue);
         else OrderSend(Symbol(),OP_SELL,lt,Bid,Slippage,Ask + sl * Point,0,"Seel",888,0,Red);
        {
        }
     }
  }                                             
      }
 }      
//----
   return(0);
  }
      //////////////////////////////////////////////////////
  int GetEma() {
  //----Получим значение EMA1
      int ma1= iMA(Symbol(),PERIOD_H1,ema1,0,1,6,0);
  //----Получим значение EMA2   
      int ma2= iMA("",PERIOD_H1,ema2,0,1,6,0); 
      if (ma1>ma2) return (1);
      else return (0);}
   /////////////////////////////////////////////////////  
         // посчитаем разтер лота
   double getLots() 
        {
                double minlot = MarketInfo(Symbol(), MODE_MINLOT);
                 int round = MathAbs(MathLog(minlot) / MathLog(10.0)) + 0.5;
                 double lot = minlot;
//---- select lot size
                 lot = NormalizeDouble(AccountFreeMargin() * Risk / 1000.0, round);
                 if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) 
                        {
                                lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), round);
                        }
                 if(lot < minlot) lot = minlot;
                 double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
                 if(lot > maxlot) lot = maxlot;
//---- return lot size
   return(lot);
        } 
 


bool flagchange = false;
int Slippage = 3;
int i = 0;
double lt = getLots() ; // Mindestlos
RefreshRates();
int total = OrdersTotal();
int ticket = -1;
for (;;)
{
int flag= GetEma();
if (flagchange != flag)

die for-Anweisung ohne den Parameter? - der Punkt? ewige Schleifen sind nicht so geschrieben, und der zweite ist, dass es globale Variablen für den EA gibt - nicht für das Terminal, sie werden ganz am Anfang des Codes vor allen Funktionen und der start()-Funktion beschrieben, wie Sie geschrieben haben - bei jedem Tick rufen Sie die start()-Funktion auf, flagchange = false; und dann versuchen Sie, diese Flagge mit dem vorherigen Zustand zu vergleichen, aber ihr Zustand wird immer falsch sein

Wenn Sie gerade erst anfangen, Ihre Kräfte auszuprobieren - nehmen Sie einen beliebigen vorgefertigten Expert Advisor von Kodobase und ändern Sie die Bedingungen für den Markteintritt nach Ihren eigenen - es wird schneller gehen.


 
MarkTrade:

Ich begann, mq4 zu lernen, und stieß sofort auf einige obskure Momente.

Ich habe mich sozusagen selbst daran versucht. Ich habe einen einfachen Expert Advisor für Ma. Aber sie will nicht einmal mit der Geschichte handeln. Es werden keine Fehler angezeigt.

Können Sie mir sagen, wo ich einen Fehler gemacht habe?


Was ist der Zweck der EA-Schleife?

for (;;) {


}