Perché isCrossing() non restituisce 2? La stessa isCrossing() ha una seconda voce if, ma poi non c'è nessuna voce if in OnTick() quando isCrossing() == 2. Che mucchio di sciocchezze...
Entrambe le condizioni combaciano...quindi si ottiene il primo risultato
Perché isCrossing() non restituisce 2? La stessa isCrossing() ha una seconda voce if, ma poi non c'è nessuna voce if in OnTick() quando isCrossing() == 2. Che mucchio di sciocchezze...
Per qualche motivo non credo che restituisca nemmeno 1.
Questa condizione
if(g_barTime < iTime(NULL,g_timeFrame,0)// и дальше
Dice che è stato aperto un nuovo bar. Al primo tick della barra open == high == low == close e == Bid - da qui la condizione
&& high > ma && Bid <= ma)
o
&& low < ma && Bid >= ma)
non può essere soddisfatta...
Oggi c'era una domanda sulla condizione if(i != i) Queste condizioni sono approssimativamente le stesse.
"1" ritorna, ha fatto il debug del codice in MetaEditor.
Inoltre, anche se tutto è uguale, lo è solo al primo tick.
Funziona così
//--- 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)'
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)'
Ho visto ora che hai aggiunto un registro. Anche qui avete messaggi duplicati :)
Entrambe le condizioni combaciano...quindi si ottiene il primo risultato
Entrambe le condizioni combaciano...quindi si ottiene il primo risultato
Per qualche motivo non credo che restituisca nemmeno 1.
Questa condizione
Dice che è stato aperto un nuovo bar. Al primo tick della barra open == high == low == close e == Bid - da qui la condizione
o
non può essere soddisfatta...Oggi c'era una domanda sulla condizione if(i != i) Queste condizioni sono approssimativamente le stesse.
P.S.
con la funzione isCrossing() ha lasciato tutto com'è.
Per qualche motivo non credo che restituisca nemmeno 1.
Questa condizione
racconta dell'apertura di un nuovo bar. Sul primo tick della barra open == high == low == close e == Bid - quindi, la condizione
o
non può essere soddisfatta...C'era una domanda oggi sulla condizione if(i != i) Queste condizioni sono circa le stesse.
"1" ritorna, ha fatto il debug del codice in MetaEditor.
Inoltre, anche se tutto è uguale, lo è solo al primo tick.
"1" ritorna, ha fatto il debug del codice in MetaEditor.
Inoltre, anche se tutto è uguale, lo è solo al primo tick.
Beh, sì, mi sono sbagliato. La nuova barra sarà solo dopo che l'intera condizione sarà soddisfatta.
Prova a sostituire alto e basso con aperto. Forse non influenzerà troppo la strategia.
"1" ritorna, ha fatto il debug del codice in MetaEditor.
Inoltre, anche se tutto è uguale, lo è solo al primo tick.
Funziona così
Funziona così.
Ho fatto questo e funziona tutto, solo i messaggi di isCrossing() sono duplicati, perché il f-e è chiamato due volte per un tick.
Così l'ho lasciato com'era, solo che ora tutto da isCrossing() viene restituito alla variabile. Niente è duplicato e tutto funziona. Grazie a tutti :)
potete spiegare la differenza tra le funzioni?
per (int j = OrdersHistoryTotal()-1; j >= 0; j--)
{
se(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY))
и
int i=OrdersHistoryTotal();
for(int pos=0; pos<i; pos++)
{
if(OrderSelect(pos, SELECT_BY_POS,MODE_HISTORY))