Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 41
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ja, Sie haben recht, aber der Code ist so geschrieben, dass mein Vorredner ihn falsch interpretiert hat.
Und zur Kontrolle?
//| TestLogics.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Value=0; // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
if(Value>0) Alert("1. Количество ордеров=",Value);
else Alert("2. Это код после else");
{
Alert("3. Ордера отсутствуют");
}
}
//+------------------------------------------------------------------+
Und prüfen?
Oh je, jetzt habe ich mir den ursprünglichen Code noch einmal angesehen, und ich habe mich geirrt. Der Schreibstil ist irgendwie schief - hat mich verwirrt.
Erneut geprüft, das "Extra" entfernt.
DieDivision durch Null hat nichts gebracht.
Erneut geprüft, das "Extra" entfernt.
DieDivision durch Null hat nichts gebracht.
Erneut geprüft, das "Extra" entfernt.
Die Division durch Null ist nicht verschwunden
Denn es wird nicht geprüft, ob der Divisor ungleich 0 ist. Was nützt es, weiteren Code auszuführen, wenn es keine Aufträge und 0 Lots gibt?
Setzen Sie einen Scheck darauf
{
double avg_price=0;
price=0;
bool z=true;
double orderlots=0;
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) && (OrderType()==FindLastOType()))
{
price+=OrderOpenPrice()*OrderLots();
orderlots+=OrderLots();
}
}
if(orderlots==0) { return; } // если ничего нет - выходим
avg_price=NormalizeDouble(price / orderlots,Digits);
if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) &&(OrderType()==FindLastOType()))
z=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);
if (!z)
Print("Ошибка функции модифицирования");
}
}
Setzen Sie einen Scheck darauf
Aber ich habe die Lose verpasst, danke.
Es ist in Ordnung, es zu verpassen, aber es ist nicht in Ordnung,die Zeitschrift nichtzu lesen, denn dort steht alles drin.
Ich hatte nicht vor, es zu lesen. Es heißt 'auf dem Markt zu überprüfen'. Meine Produkte werden nie auf den Markt kommen.
über das Dividieren durch Null.
Was ist mit dem oben genannten?Von dort aus soll es weitergehen.
{
Preis+=OrderOpenPrice()*OrderLots();
orderlots+=OrderLots();
}
}
if(orderlots==0) {return; }// wenn es nichts gibt, exit
avg_price=NormalizeDouble(price / orderslots,Digits);
if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);
Ich hatte nicht vor, es zu lesen. Es heißt "auf dem Markt zu testen". Meine Produkte werden nie auf dem Markt sein.
Ich spreche von dem Magazin im Testgerät
Hinzugefügt: Montieren Sie den Code in seinen normalen Zustand, überarbeiten Sie ihn, führen Sie ihn dann im Tester aus und lesen Sie die Fehler im Protokoll. Sie geben mir hier Codefragmente.