Ecco la funzione di trading che apre le posizioni:
//+-------------------------------------------------------------------------------------+//| Открытие позиций |//+-------------------------------------------------------------------------------------+bool Trade (int signal)
{
double sl = 0, tp = 0;
if(signal == SIGNAL_BUY && FindOrders() == 0) // Если сигнал на покупку и открытых ордеров нет...
{
g_ticket = OpenBuy(); // открываем лимитный ордер на покупкуif(g_ticket > 0 && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true) // Если ордер есть и он выбран..
{
if(i_sl != 0) // Если входной параметр стоп-лосса не равен 0, то..
sl = NormalizeDouble(OrderOpenPrice() - i_sl*Point,Digits); // Получаем значение стоп-лосса для выбранного ордераif(i_tp != 0) // Если входной параметр тейкпрофита не равен 0, то..
tp = NormalizeDouble(OrderOpenPrice() + i_tp*Point,Digits); // Получаем значение тейкпрофита для выбранного ордера
}
}
elseif(signal == SIGNAL_SELL && FindOrders() == 0) // Если сигнал на продажу и открытых ордеров нет..
{
g_ticket = OpenSell(); // Открываем лимитный ордер на продажуif(g_ticket > 0 && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true) // Если ордер есть и он выбран..
{
if(i_sl != 0) // Если входной параметр стоп-лосса не равен 0, то..
sl = NormalizeDouble(OrderOpenPrice() + i_sl*Point,Digits); // Получаем значение стоп-лосса для выбранного ордераif(i_tp != 0) // Если входной параметр тейкпрофита не равен 0, то..
tp = NormalizeDouble(OrderOpenPrice() - i_tp*Point,Digits); // Получаем значение тейкпрофита для выбранного ордера
}
}
if(sl != 0 || tp != 0) // Если полученные значения sl и tp не равныы 0, то..
{
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime); // Модифицируем ордерreturn(true);
}
return(true);
}
Tutto chiaro e conciso. L'errore 130 continua a spuntare nel tester, anche se l'Expert Advisor funziona, ma l'errore 130 continua a spuntare. Qual è la ragione di questo?
Ho pensato che avesse a che fare con il livello di stop, ho aggiunto il controllo, ma non è lo stesso. L'ho rimosso per ora perché su Alpari questo livello è 0. Si prega di suggerire cosa deve essere corretto per evitare questo errore.
Dichiarare una variabile di tipo datetime e assegnarle il valoreTime[0]. Dopo che l'ordine è stato aperto, se non è uguale aTime[0], si può aprire l'ordine successivo, se è uguale ad esso, si esce dall'inizio. Per quanto riguarda i criteri, non ho guardato il codice, ma sembra che se si tratta di uno stocastico, dovrebbe scattare all'incrocio a livelli di ipercomprato/ipervenduto (di solito >80 e <20%). Per chiarezza, impostare i livelli a 20 e 80 % nelle impostazioni stocastiche
Rigonich:
Dichiarare una variabile di tipo datetime, assegnarle il valoreTime[0], dopo aver aperto un ordine, poi se non è uguale aTime[0, si può aprire l'ordine successivo, se è uguale a -exit from start. Per quanto riguarda i criteri, non ho guardato il codice, ma sembra che se si tratta di uno stocastico, dovrebbe scattare all'incrocio a livelli di ipercomprato/ipervenduto (di solito >80 e <20%). Per maggiore chiarezza, impostate i livelli del 20 e dell'80% nelle impostazioni stocastiche.
Buon pomeriggio per favore aiutatemi, non riesco a capire perché si aprono ordini inutili ((, cerchiati in rosso nello screenshot, ecco i criteri
// Торговые критерии
M_1=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_MAIN, 0);
M_2=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_MAIN, 1);
S_1=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_SIGNAL,0);
S_2=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_SIGNAL,1);
if (M_2 < S_2 && M_1>=S_1 )
{
if (Total==1)
{
if (Vremya== Time [0])
return;
T=Close_Order (Lts,Tip);
Vremya= Time [0];
if (T==true)
{
Total=0;
}
}
if (Total==0)
{
if (Vremya== Time [0])
return;
Open_Order_B (Lts);
Vremya= Time [0];
}
}
if (M_2 > S_2 && M_1<=S_1 )
{
if (Total==1)
{
if (Vremya== Time [0])
return;
T=Close_Order (Lts,Tip);
Vremya= Time [0];
if (T==true)
{
Total=0;
}
}
if (Total==0)
{
if (Vremya== Time [0])
return;
Open_Order_S (Lts);
Vremya= Time [0];
}
}
Equilibrium: Buon pomeriggio per favore aiutatemi, non riesco a capire perché gli ordini indesiderati si aprono ((, nello screenshot sono cerchiati in rosso, ecco i criteri
Prova a prendere i valori dell'indicatore da 1 e 2 barre. Qualcosa del genere.
Ciao a tutti,
si prega di consigliare come trovare il prezzo massimo che era dopo la formazione di un frattale
Ecco la funzione di trading che apre le posizioni:
Tutto chiaro e conciso. L'errore 130 continua a spuntare nel tester, anche se l'Expert Advisor funziona, ma l'errore 130 continua a spuntare. Qual è la ragione di questo?
Questa funzione utilizza funzioni di apertura delle posizioni, eccole:
Ho pensato che avesse a che fare con il livello di stop, ho aggiunto il controllo, ma non è lo stesso. L'ho rimosso per ora perché su Alpari questo livello è 0. Si prega di suggerire cosa deve essere corretto per evitare questo errore.
double min=Low[iLowest(NULL,PERIOD_M15,MODE_LOW,32,0)];
Dichiarare una variabile di tipo datetime e assegnarle il valoreTime[0]. Dopo che l'ordine è stato aperto, se non è uguale aTime[0], si può aprire l'ordine successivo, se è uguale ad esso, si esce dall'inizio. Per quanto riguarda i criteri, non ho guardato il codice, ma sembra che se si tratta di uno stocastico, dovrebbe scattare all'incrocio a livelli di ipercomprato/ipervenduto (di solito >80 e <20%). Per chiarezza, impostare i livelli a 20 e 80 % nelle impostazioni stocastiche
Dichiarare una variabile di tipo datetime, assegnarle il valoreTime[0], dopo aver aperto un ordine, poi se non è uguale aTime[0, si può aprire l'ordine successivo, se è uguale a -exit from start. Per quanto riguarda i criteri, non ho guardato il codice, ma sembra che se si tratta di uno stocastico, dovrebbe scattare all'incrocio a livelli di ipercomprato/ipervenduto (di solito >80 e <20%). Per maggiore chiarezza, impostate i livelli del 20 e dell'80% nelle impostazioni stocastiche.
Buon pomeriggio per favore aiutatemi, non riesco a capire perché gli ordini indesiderati si aprono ((, nello screenshot sono cerchiati in rosso, ecco i criteri
Prova a prendere i valori dell'indicatore da 1 e 2 barre. Qualcosa del genere.
Ciao a tutti,
si prega di consigliare come trovare il prezzo massimo che era dopo la formazione di un frattale
Prossimo frattale superiore.
double min=Low[iLowest(NULL,PERIOD_M15,MODE_LOW,32,0)];
Buon pomeriggio per favore consigliatemi
Come faccio a registrare 1,30320 per EURUSD per esempio?