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

 
Valeriy Yastremskiy:

OrderSelect auf dem Ticket wurde bereits durchgeführt. Der Beschluss ist noch nicht rechtskräftig. Wie kann man den Auftrag handelbar machen, ohne die Auftragsart bei jedem Tick zu überprüfen? In den Protokollen wird diese Zeit aufgezeichnet, aber es scheint, dass das Feld für diese Zeit in der Auftragsstruktur nicht vorgesehen ist, oder liege ich da falsch? Wenn wir den Auftragstyp ändern, ändern sich auch OrdersTotal() und OrdersHistoryTotal nicht, wenn ich das richtig verstehe.

Ich denke, dass alles andere etwas klarer ist)

Haben Sie OrderOpenTime ausprobiert? Ich weiß nicht einmal mehr, ob sie sich ändert, wenn eine Position ausgelöst wird.

Ich weiß nicht, wann es notwendig ist, zu prüfen, ob die Pending Order jeden Tick ausgelöst hat (und nicht vor der Key Action oder alle 1...5 min), aber MT4 hat keine andere Möglichkeit.

Im MT5 ist das bequemer. In OTT informieren Sie sich über die Transaktion, wenn Sie mit Listen arbeiten müssen, führen Sie die Bearbeitung in OTT durch.

 
datetime some_time=TimeCurrent();

extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)

extern double P=15;       //Таймфрейм

int start()

{

//Инициализация переменных

bool  FractalsUp=false;

bool  FractalsDown=false;

int   FractalsUpPrice=0;

int   FractalsDownPrice=0;

int   FractalsLimit=100;

double EMA=iMA(NULL,P,5,3,MODE_EMA,PRICE_CLOSE,0);

   //Цикл сканирования последних свечей FractalsLimit, начиная с самых старых и заканчивая самыми последними.

   for (int i=FractalsLimit; i>=0; i--)

{

      //Если на свече есть фрактал, значение будет больше нуля и будет равно самой высокой или самой низкой цене.

      double fu=iFractals(NULL,0,MODE_UPPER,i);

      double fl=iFractals(NULL,0,MODE_LOWER,i);

      //Если есть верхний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsUp.

      if(fu>0)

{

FractalsUp=true;

FractalsDown=false;

FractalsUpPrice=fu;



if (((Close[0])>fu)&&(OrdersTotal() == 0)&&(Close[0]>Open[0])&&(Close[0]>High[1]&&(Close[0]>EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd=OrderCloseTime();

int hd=+iBarShift(Symbol3,P,Cd)+1;

if (hd<=2)

{

return(-1);

}

}



metka1();

}

}

//Если есть нижний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsDown.

      if(fl>0)

{

FractalsUp=false;

FractalsDown=true;

FractalsDownPrice=fl;

if (((Close[0])<fl)&&(OrdersTotal() == 0)&&(Close[0]<Open[0])&&(Close[0]<Low[1]&&(Close[0]<EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd1=OrderCloseTime();

int hd1=+iBarShift(Symbol3,P,Cd1)+1;

if (hd1<=2)

{

return(-1);

}

}

metka2();

}

}

      //Если свеча имеет верхний и нижний фрактал, значения сохраняются, но мы не считаем его последним фракталом.

      if(fu>0 && fl>0)

{

         FractalsUp=false;

         FractalsDown=false;

         FractalsUpPrice=fu;        

         FractalsDownPrice=fl;

}

}

return(0);

}

int metka1()

{              

int send1=OrderSend(Symbol3,OP_BUY,0.01,Ask,3,Bid-70*Point,Bid+70*Point);

return(0);

}

int metka2()

{                        

int send2=OrderSend(Symbol3,OP_SELL,0.01,Bid,3,Ask+70*Point,Ask-70*Point);

return(0);

}

Guten Tag!

Ich arbeite gerade an einer Eule über Fraktale. Es gibt ein Problem. Hilfe. Das Wesentliche ist Folgendes:

Das Skript sucht nach dem letzten Top- oder Bottom-Fraktal der letzten 100 Candlesticks mit der Variable [FractalsLimit=100;] und eröffnet eine BUY-Position, wenn ein Fraktal durchbrochen wird, und umgekehrt für SELL.

Die letzten 100 Candlesticks sollten verwendet werden, um das Maximum oder Minimum der Fraktale zu finden und eine Position zu eröffnen. Das bedeutet, dass es sich nur auf die maximalen und minimalen Fraktale konzentriert, nicht auf die letzten.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Aleksey Mavrin:

Haben Sie OrderOpenTime ausprobiert? Ich weiß nicht mehr, ob sie sich ändert, wenn ein schwebender Auftrag ausgelöst wird.

Ich weiß nicht, wann es notwendig ist, jeden Tick(und nicht vor Schlüsselaktionen oder alle 1...5...Minuten) zu prüfen, ob eine Pending Order ausgelöst wurde, aber es gibt keine andere Möglichkeit, dies in MT4 zu tun.

Im MT5 ist das bequemer. In OTT lernen Sie, wie man eine Transaktion durchführt. Wenn Sie mit Listen arbeiten müssen, werden Sie die Verarbeitung in OTT durchführen.

OrderOpenTime zeigt den Zeitpunkt der Eröffnung eines schwebenden Auftrags an. Es geht darum, den Vorgang besser zu verstehen. Die Zeit wird also in das Protokoll und das Journal geschrieben und nirgendwo anders angezeigt. Beziehungsweise, wenn wir es nicht repariert haben, dann können wir es später ansehen, gemäß der Tatsache)))))

Wenn ich es richtig verstehe, wird es die Eröffnung einer Position / eines Geschäfts im MT5 sein. Zwar verstehe ich die Aufteilung in Reihenfolge/Handel/Position nicht als optimale Lösung, aber es gibt natürlich mehr Daten.

 
Aleksey Mavrin:

es kommt vor)) 1 verliert sich sehr im Hintergrund der englischen Buchstaben l i usw., es ist bequemer, dann die Suffixe 001, 2... usw. zu nennen.

Ich verstehe, was Sie meinen) den Fehler korrigiert, jetzt ist der Wert des zweiten Griffs 1,0. Wenn Sie im ersten Handle einen größeren Zeitrahmen als im zweiten Handle angeben, ist der Wert des zweiten Handles 0. Können Sie mir bitte sagen, was ich noch reparieren muss, damit der zweite Griffwert stimmt?

void OnTick()
  {
   double PriceArray[];
   
   int AOhandle = iAO(_Symbol,PERIOD_M15);
   
   ArraySetAsSeries(PriceArray, true);
   
   CopyBuffer(AOhandle, 0, 0, 3, PriceArray);
   
   double AOvalue = NormalizeDouble(PriceArray[0], 6);

   double PriceArray01[];
   
   int AOhandle01 = iAO(_Symbol,PERIOD_H1);
   
   ArraySetAsSeries(PriceArray01, true);
   
   CopyBuffer(AOhandle01, 1, 0, 3, PriceArray01);
   
   double AOvalue01 = NormalizeDouble(PriceArray01[0], 6);
    
   Comment ("Awesome Oscillator Value: ", AOvalue, "\n", "\n",
            "Awesome Oscillator Value: ", AOvalue01);
  }
 
Valeriy Yastremskiy:

OrderOpenTime zeigt die Eröffnungszeit des schwebenden Auftrags an. Es geht darum, den Vorgang besser zu verstehen. Es stellt sich heraus, dass die Zeit im Protokoll und im Journal aufgezeichnet wird und nirgendwo anders erscheint. Dementsprechend, wenn wir es nicht festgelegt haben, dann können wir später schauen, nach der Tatsache)))))

Sie sprechen dieses Thema schon seit einer Woche an, und ich habe Ihnen angeboten, die Grundsätze der Auftragsvergabe in der Handelsstrategie zu überprüfen

Aber wenn dieser Punkt für Sie wichtig ist, ist es kein Problem, ihn mit einer Nachjustierung um einen Tick zu "beheben".

Ich kann wie alle Anfänger "reparieren", indem ich ausstehende Aufträge in einem großen Array speichere und diese Ticks prüfe, wenn ein Tick kommt - ich habe bereits über die Geschwindigkeit geschrieben, es ist nicht kritisch, weder in einem Tester noch in einem echten Konto, aber das Array ist nicht praktisch, es ist lästig, sie sauber zu halten - das fügt Fehler hinzu...


Was ich vorschlagen möchte, ist dieCArrayInt SB https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayint zu untersuchen.

in CArrayInt fügen Sie Tickets hinzu, und dieser Datentyp ermöglicht es Ihnen, "Tickets, die marktfähig wurden", einfach zu löschen.


wie ich oben geschrieben habe, Genauigkeit - 1 Tick, der Prüfcode wird minimal sein

Valeriy Yastremskiy:

Im MT5 ist es eine Positions-/Handelseröffnung, wenn ich das richtig verstehe. Zwar verstehe ich die Aufteilung in Order / Trade / Position nicht als optimale Lösung, aber es gibt natürlich mehr Daten.

Wenn Sie für MT5 schreiben können - was ist dann der Sinn dieser Diskussion? Sie schreiben, die Plattform ist leistungsfähiger, die Funktionalität ist höher - es macht keinen Sinn, MT4 und MT5 zu vergleichen, es ist einfacher, sich bei MT4 einzuloggen, aber MT5 hat mehr Funktionen

 
Igor Makanu:

Sie haben dieses Problem seit einer Woche angesprochen. Ich habe Ihnen vorgeschlagen, die Grundsätze der Auftragsvergabe in der Handelsstrategie zu überdenken.


Das verstehe ich immer noch nicht. Die Strategie ist natürlich eine andere. Die Frage ergibt sich aus der Tatsache, dass ein recht wichtiges Ereignis nur im Protokoll wiedergegeben wird. Und niemand hat direkt geantwortet, dass es nirgendwo etwas anderes gibt als das Protokoll des Zeitpunkts, zu dem ein Auftrag marktfähig wurde))))

Und die Logik der Strategie hängt nicht vom Terminal ab. Wenn die Logik lahm ist, dann kann man sie zwar erfinden, aber das Hinken wird nicht verschwinden))))

 
Valeriy Yastremskiy:

Es bleibt unklar. Die Strategie ist natürlich eine andere. Die Frage ergibt sich aus der Tatsache, dass ein ziemlich wichtiges Ereignis nur im Protokoll wiedergegeben wird. Und niemand hat direkt darauf geantwortet, dass es nirgendwo etwas anderes gibt als das Protokoll des Zeitpunkts, zu dem der Auftrag vermarktet wurde))))

nein diese Informationen - nein!!!

Bedeutung... Nun, es ist wichtig für Sie, vor, dass, wie viele Jahre des Schreibens Strategien und wie es funktionierte, auch in Gewinn ;)

in der Regel nicht viele schwebende Aufträge erteilen, sondern Marktaufträgen folgen, ggf. einen schwebenden Auftrag hinzufügen - schwebende Aufträge werden zu Marktaufträgen

wir verwenden alles - Mittelwertbildung, Pyramidenbildung, Auftragsraster und ... und viele... Ich erinnere mich nicht an diese Eskapaden in den Händlerforen, ich habe sie seit mehr als einem Jahr nicht mehr gelesen - ich habe mehr eigene Gedanken als die anderer Leute )))

 
Igor Makanu:

es gibt keine solchen Informationen - nein!!!

Bedeutung... Nun, es ist wichtig für Sie, vor, dass, wie viele Jahre des Schreibens eine Strategie und es würde funktionieren, auch im Gewinn ;)

In der Regel sollten Sie nicht viele Pending Orders platzieren, sondern den Market Orders folgen, ggf. eine Pending Order hinzufügen - Pending Orders werden zu Market Orders

wir verwenden alles - Mittelwertbildung, Pyramidenbildung, Auftragsraster und ... und viele... Wenn Sie es nicht wissen, sollten Sie diese Tricks in den Händlerforen lesen, ich tue es seit über einem Jahr nicht mehr - ich habe mehr eigene Gedanken als die der anderen )))

Danke))))

Martin und die Mittelwertbildung sind Selbstbetrug und prohibitiv (weil man das Risiko nach der Definition der BP-Eigenschaften weder berechnen noch vorhersagen kann))))) Risiko, das manchmal, aber nur manchmal, gerechtfertigt ist))))

Wenn die Strategie richtig ist, reicht ein Auftrag aus))))

 
Valeriy Yastremskiy:

Wenn die Strategie richtig ist, ist ein Auftrag ausreichend ))))

Wenn in Ihrem TS die Anzahl der Aufträge strikt festgelegt ist, dann sollten Sie keine Probleme damit haben, festzustellen, was mit den ausstehenden Aufträgen zum aktuellen Tick passiert ist

Die genaue Zeit zu kennen, bringt Ihnen nichts - alle Informationen erhalten Sie bei Ankunft des Häkchens - kein Häkchen, keine Informationen

 

Hallo, ich stehe vor dem Problem, wie ich die Parameter eines benutzerdefinierten Indikators in einem EA ändern kann. Das Problem ist, dass, wenn ich einen Parameter in der Liste der Indikatoren ändere, eine neue Kopie erstellt wird. Wenn ich zu den Eigenschaften dieser Kopien gehe, hat jede Kopie ihren eigenen Parameter. Je mehr ich den Parameter ändere, desto mehr Kopien werden erstellt. Ich verwende es über iCustom.

Zum Beispiel:

#resource "\\Indicators\\\inicator.ex4"

extern Var1=1;

//------------------------------------------

void OnTick()

{

zu A;

Var1++;

A=iCustom(Symbol(),PERIOD_CURRENT,"::Indicators\\\indicator",Var1,0,0);

Als Ergebnis sehen wir in der Liste der Indikatoren:

Indikator (mit Parameter Var1=2)

Indikator (mit Parameter Var1=3)

Indikator (mit Parameter Var1=4)

.... usw.


Grund der Beschwerde: