Warum gibt isCrossing() nicht 2 zurück? Die Funktion isCrossing() selbst hat einen zweiten if-Eintrag, aber dann gibt es keinen if-Eintrag in OnTick(), wenn isCrossing() == 2 ist. Was für ein Blödsinn...
Beide Bedingungen treffen zu... so erhalten Sie das erste Ergebnis
Warum gibt isCrossing() nicht 2 zurück? Die Funktion isCrossing() selbst hat einen zweiten if-Eintrag, aber dann gibt es keinen if-Eintrag in OnTick(), wenn isCrossing() == 2 ist. Was für ein Blödsinn...
Aus irgendeinem Grund glaube ich auch nicht, dass es 1 zurückgibt.
Diese Bedingung
if(g_barTime < iTime(NULL,g_timeFrame,0)// и дальше
Zeigt an, dass eine neue Bar eröffnet wurde. Beim ersten Tick des Balkens ist Open == High == Low == Close und == Bid - daher die Bedingung
&& high > ma && Bid <= ma)
oder
&& low < ma && Bid >= ma)
nicht erfüllt werden kann...
Heute wurde eine Frage zur Bedingung if(i != i) gestellt. Diese Bedingungen sind ungefähr gleich.
"1" zurückgibt, hat Code-Debugging in MetaEditor durchgeführt.
Und selbst wenn alles gleich ist, gilt dies nur für den ersten Tick.
Das funktioniert folgendermaßen
//--- input parametersinputint g_maPeriod = 14;
inputint g_maShift = 1;
inputENUM_APPLIED_PRICE g_maPrice = PRICE_CLOSE; //Applied priceinputENUM_MA_METHOD g_maMethod = MODE_SMA; //Method MainputENUM_TIMEFRAMES g_timeFrame = PERIOD_CURRENT; //Timeframe for calculatedatetime g_barTime=0;
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---if(g_barTime != iTime(NULL,g_timeFrame,0))
{
if(isCrossing()==1)
{
Print("enter to '1. if (isCrossing)'"); g_barTime = iTime(NULL,g_timeFrame,0);
}
if(isCrossing()==2)
{
Print("enter to '2. if (isCrossing)'"); g_barTime = iTime(NULL,g_timeFrame,0);
}
}
}
//+------------------------------------------------------------------+int isCrossing()
{
int res=0;
double low = iLow(Symbol(), g_timeFrame, 1);
double high = iHigh(Symbol(), g_timeFrame, 1);
double ma = iMA(_Symbol, g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maPrice, 0);
if(high > ma && Bid <= ma) res=1;
if(low < ma && Bid >= ma) res=2;
return (res);
}
//+------------------------------------------------------------------+
2021.08.2509:24:56.6292021.08.2023:50:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.6242021.08.2023:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5922021.08.2021:35:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5822021.08.2021:05:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5662021.08.2020:20:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5542021.08.2018:50:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:40:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
Ich habe dies getan und es hat funktioniert, nur die Meldungen von isCrossing() werden dupliziert, weil die Funktion zweimal beim gleichen Tick aufgerufen wird.
Also habe ich es so gelassen, wie es war, nur dass jetzt alles von isCrossing() an die Variable zurückgegeben wird. Nichts wird dupliziert und alles funktioniert. Vielen Dank an alle :)
2021.08.2509:24:56.6292021.08.2023:50:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.6242021.08.2023:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5922021.08.2021:35:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5822021.08.2021:05:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5662021.08.2020:20:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5542021.08.2018:50:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:40:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
Ich sehe jetzt, dass Sie ein Protokoll hinzugefügt haben. Auch hier haben Sie doppelte Nachrichten :)
Beide Bedingungen treffen zu... so erhalten Sie das erste Ergebnis
Beide Bedingungen treffen zu... so erhalten Sie das erste Ergebnis
Aus irgendeinem Grund glaube ich auch nicht, dass es 1 zurückgibt.
Diese Bedingung
Zeigt an, dass eine neue Bar eröffnet wurde. Beim ersten Tick des Balkens ist Open == High == Low == Close und == Bid - daher die Bedingung
oder
nicht erfüllt werden kann...Heute wurde eine Frage zur Bedingung if(i != i) gestellt. Diese Bedingungen sind ungefähr gleich.
P.S.
mit der Funktion isCrossing() hat alles so gelassen, wie es ist.
Aus irgendeinem Grund glaube ich auch nicht, dass es 1 zurückgibt.
Diese Bedingung
erzählt von der Eröffnung einer neuen Bar. Am ersten Tick des Balkens ist Open == High == Low == Close und == Bid - daher die Bedingung
oder
nicht erfüllt werden kann...Heute wurde eine Frage zur Bedingung if(i != i) gestellt. Diese Bedingungen sind in etwa gleich.
"1" zurückgibt, hat Code-Debugging in MetaEditor durchgeführt.
Und selbst wenn alles gleich ist, gilt dies nur für den ersten Tick.
"1" zurückgibt, hat Code-Debugging in MetaEditor durchgeführt.
Und selbst wenn alles gleich ist, gilt dies nur für den ersten Tick.
Nun, ja, ich habe mich geirrt. Der neue Balken wird erst dann angezeigt, wenn die gesamte Bedingung erfüllt ist.
Versuchen Sie, hoch und niedrig durch offen zu ersetzen. Vielleicht wird es die Strategie nicht allzu sehr beeinträchtigen.
"1" zurückgibt, hat Code-Debugging in MetaEditor durchgeführt.
Und selbst wenn alles gleich ist, gilt dies nur für den ersten Tick.
Das funktioniert folgendermaßen
Es funktioniert folgendermaßen.
Ich habe dies getan und es hat funktioniert, nur die Meldungen von isCrossing() werden dupliziert, weil die Funktion zweimal beim gleichen Tick aufgerufen wird.
Also habe ich es so gelassen, wie es war, nur dass jetzt alles von isCrossing() an die Variable zurückgegeben wird. Nichts wird dupliziert und alles funktioniert. Vielen Dank an alle :)
Können Sie bitte den Unterschied zwischen den Funktionen erklären?
for (int j = OrdersHistoryTotal()-1; j >= 0; j--)
{
if(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY))
и
int i=AuftragshistorieGesamt();
for(int pos=0; pos<i; pos++)
{
if(OrderSelect(pos, SELECT_BY_POS,MODE_HISTORY))