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

 
Alexey Viktorov:

Einfach so.

Danke, genau das, was ich brauche!

 

Guten Tag!

Könnten Sie uns bitte zu diesem Thema beraten?

Ich erteile einen schwebenden Auftrag:

bool send1=OrderSend(Symbol(),OP_BUYSTOP,Lots,Price,3,SL,TP,NULL,MagicNumber,0,clrGreen);

Und dann versuche ich, einen Trailing-Stop zu setzen, nachdem er eröffnet wurde:

 {
 for(int i=0; i<OrdersTotal(); i++) 
  {
  if(OrderSelect(i,SELECT_BY_POS))
  if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)
  if(OrderType()==OP_BUY)
   {
  if(TrailingStop>0)  
    {                 
  if(Bid-OrderOpenPrice()>TrailingStop)
     {
  if(OrderStopLoss()<Bid-TrailingStop)
      {
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,clrRed);
      }
     }
    }
   }
  }
 }

Nach seiner Eröffnung wird der Auftrag zu OP_BUY? Was ist der Trick, warum das Nachziehen in diesem Fall nicht funktioniert?

 
YanSay:

Guten Tag!

Könnten Sie uns bitte zu diesem Thema beraten?

Ich erteile einen schwebenden Auftrag:

Und dann versuche ich, einen Trailing-Stop zu setzen, nachdem er eröffnet wurde:

Nach seiner Eröffnung wird der Auftrag zu OP_BUY? Was ist der Trick, warum das Nachziehen in diesem Fall nicht funktioniert?

100500 Gründe. Der erste offensichtliche Grund ist, dass Bid-TrailngStop nicht normalisiert ist. Sie könnte sogar noch näher an der Stopebene liegen und dann auch undurchsichtig sein.
 
YanSay:

Guten Tag!

Könnten Sie uns bitte zu diesem Thema beraten?

Ich erteile einen schwebenden Auftrag:

Und dann versuche ich, einen Trailing-Stop zu setzen, nachdem er eröffnet wurde:

Nach seiner Eröffnung wird der Auftrag zu OP_BUY? Was ist der Trick, warum das Nachziehen in diesem Fall nicht funktioniert?

TrailingStop in Pips? dann mit Punkt multiplizieren.
 

Ich habe die falsche Frage gestellt, tut mir leid. Aus dem Zusammenhang gerissen.

Vor allem, um Trailing-Code zu testen, Geschäfte öffnen, aber Trailing funktioniert nicht, egal wie ich es drehte, Patt(

//Вводные
#define  MagicNumber 150
double SL=0;                        //Stop Loss
input int Trailing=100;             //Трэйлинг

//Код

void OnTick()
{
 if (OrdersTotal()==0)
 {
   if(TimeCurrent()>StrToTime("17:59")&&TimeCurrent()<StrToTime("18:01"))
  {
SL = Low[1]-Point; //Стоп лосс
bool send1=OrderSend (Symbol(), OP_BUY,1,Bid,30,SL,0,NULL,MagicNumber,0,clrNONE);
  }
 }
 if (OrdersTotal()>0)
   {
      for (int i=0; i<OrdersTotal (); i++)
    {
   bool select1=OrderSelect (i, SELECT_BY_POS);
   if (OrderMagicNumber() == MagicNumber && OrderSymbol () == Symbol())
     {
   if (OrderType()==OP_BUY)
      {
     if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))
     bool modify1=OrderModify (OrderTicket(),0,Ask-Trailing,OrderTakeProfit(),0,CLR_NONE);
      }
     }
    }
   }
}
 
YanSay:

Ich habe die falsche Frage gestellt, tut mir leid. Aus dem Zusammenhang gerissen.

Vor allem, um Trailing-Code zu testen, Geschäfte öffnen, aber Trailing funktioniert nicht, egal wie ich es drehte, Patt(

Ich habe Ihre Frage oben beantwortet.
 
Vladislav Andruschenko:
Ich habe Ihre Frage oben beantwortet.
Vielen Dank, das war sehr hilfreich!
 
YanSay:
Vielen Dank, das war sehr hilfreich!

Sie haben dort immer noch Probleme.

Die Schleife ist vorwärts gerichtet, sie sollte rückwärts gerichtet sein - bei der Vorwärtsrichtung werden Positionen übersprungen, nachdem sich eine von ihnen am Schleppnetz geschlossen hat.

Es gibt keine Überprüfung für den minimalen Stop-Abstand (StopLevel) - es wird zu Modifikationsfehlern kommen, wenn der Stop näher am Preis liegt als der minimale erlaubte Abstand (vergessen Sie nicht den Floating Spread)

Vielleicht noch etwas anderes - schräg angeschaut - im Vorbeigehen, da man es Ihnen ja schon gesagt hat.

ZS: Ich habe noch einmal nachgesehen:

if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))

Bei dieser Art von Prüfung geht der eigentliche Sinn der Prüfung mit Normalisierung verloren, da Sie beide Werte normalisiert haben und das Ergebnis bei der Prüfung nicht erneut normalisiert wird.

Sie müssen die normalisierte Differenz der beiden Doppelwerte prüfen. Sie vergleichen zwei normalisierte Werte.

 
Artyom Trishkin:

Sie haben dort immer noch Probleme.

Die Schleife ist vorwärtsgerichtet; sie muss rückwärtsgerichtet sein - bei einer vorwärtsgerichteten Schleife werden Positionen übersprungen, nachdem sich eine von ihnen am Schleppnetz geschlossen hat.

Es gibt keine Überprüfung für den minimalen Stop-Abstand (StopLevel) - es wird zu Modifikationsfehlern kommen, wenn der Stop näher am Preis liegt als der minimale erlaubte Abstand (vergessen Sie nicht den Floating Spread)

Vielleicht noch etwas anderes - schräg angeschaut - im Vorbeigehen, da man es Ihnen ja schon gesagt hat.

ZS: Ich habe noch einmal nachgesehen:

Bei dieser Art von Prüfung geht der eigentliche Sinn der Prüfung mit Normalisierung verloren, da Sie beide Werte normalisiert haben und das Ergebnis bei der Prüfung nicht erneut normalisiert wird.

Sie sollten die normierte Differenz von zwei Doppelwerten prüfen. Sie vergleichen zwei normalisierte Werte.

Etwa so?

for (int i = OrdersTotal() - 1; i >= 0; --i)
if (NormalizeDouble((Ask-OrderStopLoss()>Trailing*Point),Digits))
 
the size of local variables is too large (more than 512 kb)
Was bedeutet der Fehler?


Ich habe eine Funktion mit zwei Objekten:

bool              CheckCandleOneRules(CCandlePropertiesBase *candle,
                                      CCandleRule *rule,
                                      int dir);

Eine der Klassen hat eine Struktur mit mehr als 4000 Feldern (meist Enums).

Was ist bei diesem Fehler zu tun?

Grund der Beschwerde: