Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1584

 
Valeriy Yastremskiy:

Modul Unterschied. Ohne Modul fällt nur die obere Zone in die Bedingung. | OpenPrice - Bid |> 10*_Point opening condition

So sollte die Bedingung sein: Bid ist niedriger als OpenPrice und keine Module.

Andernfalls erhalten wir ein korrektes Ergebnis, wenn Bid höher ist als OpenPrice

 
Valeriy Yastremskiy:

Modul Unterschied. Ohne das Modul fällt nur die obere Zone in die Bedingung. | OpenPrice - Bid |> 10*_Point opening condition

Ich verstehe das nicht ganz...

Können Sie das bitte deutlicher machen...für einen Anfänger)

 
MakarFX:

Sie überraschen mich.


Womit?
 
Alexey Viktorov:
Wie?
Alexey Viktorov:

Aus dem Bild können Sie ersehen, dass OpenPrice - Bid nicht mehr als 10*_Point betragen sollte

kann aber auch weniger sein, einschließlich negativer

 
MakarFX:

kann aber auch weniger sein, einschließlich negativer

Ja... und Sie erhalten die Bedingung mit "&& > 0"

Wie lautet die Frage? Einfach so, oder für etwas anderes?

 
Alexey Viktorov:

Ja... und Sie erhalten die Bedingung mit "&& > 0"

Wie lautet die Frage? Einfach so, oder für etwas anderes?

Ich verwende derzeit diese Definition des Zeitpunkts für den Markteintritt

if(Bid < OpenPrice && Bid > OpenPrice-Х*Point)
if(Ask > OpenPrice && Ask < OpenPrice+Х*Point)

Ich dachte, es gäbe vielleicht eine Möglichkeit, das zu vereinfachen)

 

Hilfe bei der Optimierung eines Stücks Code für Martin

Die Aufgabe lautet wie folgt:

-nach der Haltestelle wird ein Martin das Los vervielfältigen;

-Die Anzahl der Multiplikationen kann mit der Funktion OrdersClose eingestellt werden, und wenn sie einen bestimmten Wert erreicht, wird die Partie auf den Anfangswert zurückgesetzt;

- darf die Menge der Partie nicht auf die Ausgangsmenge zurückgesetzt werden, sondern muss in umgekehrter Reihenfolge verringert werden;

zum Beispiel OrdersClose=5, Martin=2, Lot=0,01:

ergibt sich die Reihenfolge: 0,01; 0,02; 0,04; 0,08; 0,16 (Reset) 0,01; 0,01;,,,,

Bedarf: 0,01; 0,02; 0,04; 0,08; 0,16 (Reset) 0,16; 0,08; 0,04; .... 0,01.

Ich habe nicht genug Wissen, um das Problem selbst zu lösen.

Ich habe versucht, verschiedene Kombinationen einzugeben, habe aber nicht den gewünschten Effekt erzielt.

double LOT()
{
   int n=0;
   double OL=dLots;
   for (int j = OrdersHistoryTotal()-1; j >= 0; j--)
   {
      if (OrderSelect(j, SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == iMagic)
         {
            if (OrderProfit()<0) 
            {
               if (n==0) OL=NormalizeDouble(OrderLots()*K_Martin,DigitsLot);
               n++;
               if (n>=OrdersClose) {Comment("1");return(dLots);}
            }
            else
            {
               if (n==0) {Comment("2");return(dLots);}
               else {Comment("3");return(OL);}
            }
         }
      }
   }
   return(OL);
}
 
MakarFX:

Ich verwende derzeit diese Definition des Markteintrittspunktes

Ich dachte, es gäbe eine Möglichkeit, das zu vereinfachen)

if(Bid < OpenPrice && Bid > OpenPrice-Х*Point)
if(Ask > OpenPrice && Ask < OpenPrice+Х*Point) // цену в середину диапазона ставим

OpenPriceS=OpenPrice-X*Point/2;
if(fabs(Bid-OpenPriceS)>Х*Point){ ....   }

Und Alexey hat Recht))

Alexey Viktorov:

So sollte es nach den Bedingungen sein, Gebot unter OpenPrice und keine Module.

Andernfalls erhalten wir ein korrektes Ergebnis, wenn Bid höher ist als OpenPrice

Festgelegt)

Ja, richtig. Der Zustand hat sich nicht geändert. Aus Gewohnheit. Es verwirrt auf einem Bild, dass Bid in der Mitte ist))))

Aber dort ist die zweite Bedingung, der Eintrag, die gleiche Anzahl von Bedingungen.

 
законопослушный гражданин:

Hilfe bei der Optimierung eines Stücks Code für Martin

Die Aufgabe lautet wie folgt:

-nach der Haltestelle wird ein Martin das Los vervielfältigen;

-Die Anzahl der Multiplikationen kann mit der Funktion OrdersClose eingestellt werden, und wenn sie einen bestimmten Wert erreicht, wird die Partie auf den Anfangswert zurückgesetzt;

- darf die Menge der Partie nicht auf die Ausgangsmenge zurückgesetzt werden, sondern muss in umgekehrter Reihenfolge verringert werden;

zum Beispiel OrdersClose=5, Martin=2, Lot=0,01:

ergibt sich die Reihenfolge: 0,01; 0,02; 0,04; 0,08; 0,16 (Reset) 0,01; 0,01;,,,,

Bedarf: 0,01; 0,02; 0,04; 0,08; 0,16 (Reset) 0,16; 0,08; 0,04; .... 0,01.

Ich habe nicht genug Wissen, um das Problem selbst zu lösen.

Ich habe verschiedene Kombinationen ausprobiert, habe aber nicht den gewünschten Effekt erzielt.

//+------------------------------------------------------------------+
//| Расчет лота                                                      |
//+------------------------------------------------------------------+
double Lots()
  {
   double L=0;
   // если последняя закрытая сделка убыточная и лот равен стартовому
   // включаем Мартин
   if(GetInfoLastPos(2)<0&&GetInfoLastPos(1)==Lot) 
     {
      Martin=true;
     }
   // если последняя закрытая сделка убыточная и лот больше или равен максимальному
   // выключаем Мартин
   if(GetInfoLastPos(2)<0&&GetInfoLastPos(1)>=MaxMartinLot)
     {
      Martin=false;
     }
   // если последняя закрытая сделка убыточная и Мартин включен, умножаем лот
   if(Martin==true)
     {
      L=NormalizeDouble(GetInfoLastPos(1)*K_Martin,DigitsLot);
     }
   // если последняя закрытая сделка убыточная и Мартин выключен, делим лот
   if(Martin==false)
     {
      L=NormalizeDouble(GetInfoLastPos(1)/K_Martin,DigitsLot);
     }

   if(L>MAXLOT) L = MAXLOT;
   if(L<MINLOT) L = MINLOT;
   return(L);
  }
//+----------------------------------------------------------------------------+
//|  Функция возвращает по символу и магику                                    |
//|  1 - размер лота последней закрытой позиции                                |
//|  2 - размер профита с учетом комиссии и свопа последней закрытой позиции   |
//|  3 - время последней закрытой позиции                                      |
//+----------------------------------------------------------------------------+
double GetInfoLastPos(int a=1)
  {
   datetime t=0;
   double result=0,l=0,p=0,f=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();}
              }
           }
        }
     }
   if(a==1) {result=l;} else
   if(a==2) {result=p;} else
   if(a==3) {result=(double)t;}
   else     {result=0;}
   return(result);
  }
 
Valeriy Yastremskiy:

Und Alexej hat recht))

Ja, das ist richtig. Der Zustand hat sich nicht geändert. Aus Gewohnheit. Es ist verwirrend auf dem Bild, dass Bid in der Mitte ist)))

Danke, aber das vereinfacht meinen Code in keiner Weise)

Grund der Beschwerde: