Tenendo conto delle critiche costruttive, ho modificato il codice della funzione Check:
bool Check_Trading()
{
//--- проверка разрешения автоматической торговли на терминалеif(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
{
Print("Ошибка разрешения автоматической торговли на терминале! ",GetLastError());
return(false);
}
//--- проверка разрешения автоматической торговли на стороне сервераif(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))
{
Print("Ошибка разрешения автоматической торговли на стороне сервера! ",GetLastError());
return(false);
}
//--- проверка синхронизированности данных по текущему символу между терминалом и серверомif(!SymbolIsSynchronized(_Symbol))
{
Print("Ошибка синхронизированности данных по текущему символу! ",GetLastError());
return(false);
}
//--- проверка достаточности средств для торговлиif(!CheckMoneyForTrade(_Symbol,GetLot(),ORDER_TYPE_SELL))
{
Print("Ошибка проверки достаточности средств для торговли! ",GetLastError());
return(false);
}
//--- проверки корректности объёма сделкиstring descript;
if(!CheckVolumeValue(GetLot(),descript))
{
Print("Ошибка проверки корректности объёма сделки! ",GetLastError());
return(false);
}
//--- проверка прошла успешноreturn(true);
}
Le funzioni CheckMoneyForTrade() e CheckVolumeValue() non sono state postate, in quanto liberamente disponibili e prese da qui.
Sì, sembra normale, ma è meglio controllare il volume e la sufficienza in un'unica funzione e cambiare la logica sulla sufficienza. Controlliamo se il lotto di margine è più grande o più piccolo, ma non lo riduciamo, se il lotto richiesto è più piccolo, calcolo anche il lotto in relazione al margine disponibile, quale lotto può essere impostato, e lo confronto con il lotto minimo, e se è più piccolo, allora l'operazione è definitivamente conclusa.
Buona giornata a tutti! Ho un indicatore Stocastico RSI. Il problema è che funziona molto lentamente. Per quanto ho capito il "freno" principale crea questa sezione a causa del grande periodo, che viene utilizzato per cercare il minimo e il massimo negli array:
Idealmente, la soluzione potrebbe essere quella di far passare l'indicatore attraverso tutte le barre della storia durante la prima esecuzione, e di aggiornare solo l'ultima barra durante le successive. Ma non capisco come fare. È possibile farlo? Se sì, vi sarò grato se condividerete un link o un consiglio su come farlo.
Ecco il codice completo dell'indicatore:
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{ // OnCalculateArraySetAsSeries(time,true);
if( t != time[0]) { // контроль бара
t = time[0];
ArrayInitialize(Buffer_Step1_RSI,0);
CopyBuffer(RSI_Handle,0,0,rates_total,Buffer_Step1_RSI);
double lRsi, lLowestRsi, lHighestRsi;
int ZZZ = rates_total - MathMax(MathMax(RsiLength,StochLength),MathMax(SmoothK,SmoothD)) - 1;
for (int i = ZZZ; i >= 0; i-- ) { // Цикл расчета индикатора // ====== Calulate Stochastic of RSI ======
lRsi = Buffer_Step1_RSI[i];
lLowestRsi = Buffer_Step1_RSI[ArrayMinimum(Buffer_Step1_RSI,i,StochLength)];
lHighestRsi = Buffer_Step1_RSI[ArrayMaximum(Buffer_Step1_RSI,i,StochLength)];
Buffer_Step2_Calculate[i] = ( (lRsi-lLowestRsi) / (lHighestRsi-lLowestRsi) ) * 100;
// ====== Рассчитываем само значение предварительное (МА1) ======// Расчет для всех циклов, кроме первого (МА1)
Step3_MA_Sum = Step3_MA_Sum - Buffer_Step2_Calculate[i + SmoothK + 1] + Buffer_Step2_Calculate[i+1];
// Расчет для первого цикла (идет 2-ым номером, т.к. в IF можно обнулить данные) (МА1)if (i == ZZZ) {
Step3_MA_Sum = 0;
for (int kk = i+1; kk <= i + SmoothK + 1; kk++) Step3_MA_Sum = Step3_MA_Sum + Buffer_Step2_Calculate[kk];
}
Buffer_Step3_MA1[i] = Step3_MA_Sum / SmoothK;
// ====== Расчитываем само значение индикатора (МА2) ====== // Расчет для всех циклов, кроме первого (МА2)
Step4_MA_Sum = Step4_MA_Sum - Buffer_Step3_MA1[i + SmoothD+1] + Buffer_Step3_MA1[i+1];
// Расчет для первого цикла (идет 2-ым номером, т.к. в IF можно обнулить данные) (МА2) if (i == ZZZ) {
Step4_MA_Sum = 0;
for (int kk = i+1; kk <= i + SmoothD + 1; kk++) Step4_MA_Sum = Step4_MA_Sum + Buffer_Step3_MA1[kk];
}
Buffer_Step4_MA2_IndicatorData[i] = Step4_MA_Sum / SmoothD;
FirstCycle = false;
} // Цикл расчета индикатора
} // контроль бараreturn(rates_total);
} // OnCalculate
Penso che vada bene, ma è meglio mettere il controllo del volume e della sufficienza in un'unica funzione e cambiare anche la logica per la sufficienza. Controlliamo se il lotto di margine è maggiore o minore, ma non lo riduciamo, se il lotto richiesto è minore, calcolo anche il lotto relativo al margine disponibile, quale lotto può essere impostato, e lo confronto con il lotto minimo, e se è minore, allora l'operazione è definitivamente conclusa.
2023.02.0214:41:05.466 Experts automated trading is disabled because the account has been changed
2023.02.0214:41:09.990 Experts automated trading is enabled
2023.02.0214:42:43.410 Experts automated trading is disabled because the account has been changed
2023.02.0214:42:52.690 Experts automated trading is enabled
2023.02.0214:43:33.882 Experts automated trading is disabled because the account has been changed
2023.02.0214:43:44.869 Experts automated trading is enabled
Sarebbe interessante sapere di cosa si tratta? Non nel senso della traduzione in russo, perché l'ho già tradotta:
2023.02.0214:41:05.466 Автоматическая торговля экспертов отключена, так как аккаунт был изменен
ma nel senso di come si può cambiare un account? Qualcuno può dirmi cosa diavolo sta succedendo al mio account e cosa fare in questi casi?
Forse è in qualche modo collegato al fatto che sono passato temporaneamente dal conto reale a quello demo?
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Buongiorno e buon umore!
Tenendo conto delle critiche costruttive, ho modificato il codice della funzione Check:
Le funzioni CheckMoneyForTrade() e CheckVolumeValue() non sono state postate, in quanto liberamente disponibili e prese da qui.
Questo minimo sarà sufficiente per evitare il problema con l'Expert Advisor che ho avuto l'altro ieri?
Saluti, Vladimir.
Buongiorno e buon umore a tutti!
Tenendo conto delle critiche costruttive, ho modificato il codice della funzione di controllo:
Le funzioni CheckMoneyForTrade() e CheckVolumeValue() non sono state pubblicate, in quanto liberamente disponibili e prese da qui.
Sarà sufficiente questo minimo per evitare il problema con l'Expert Advisor che ho avuto l'altro ieri?
Saluti, Vladimir.
Sì, sembra normale, ma è meglio controllare il volume e la sufficienza in un'unica funzione e cambiare la logica sulla sufficienza. Controlliamo se il lotto di margine è più grande o più piccolo, ma non lo riduciamo, se il lotto richiesto è più piccolo, calcolo anche il lotto in relazione al margine disponibile, quale lotto può essere impostato, e lo confronto con il lotto minimo, e se è più piccolo, allora l'operazione è definitivamente conclusa.
Buona giornata a tutti! Ho un indicatore Stocastico RSI. Il problema è che funziona molto lentamente. Per quanto ho capito il "freno" principale crea questa sezione a causa del grande periodo, che viene utilizzato per cercare il minimo e il massimo negli array:
Idealmente, la soluzione potrebbe essere quella di far passare l'indicatore attraverso tutte le barre della storia durante la prima esecuzione, e di aggiornare solo l'ultima barra durante le successive. Ma non capisco come fare. È possibile farlo? Se sì, vi sarò grato se condividerete un link o un consiglio su come farlo.
Ecco il codice completo dell'indicatore:
Penso che vada bene, ma è meglio mettere il controllo del volume e della sufficienza in un'unica funzione e cambiare anche la logica per la sufficienza. Controlliamo se il lotto di margine è maggiore o minore, ma non lo riduciamo, se il lotto richiesto è minore, calcolo anche il lotto relativo al margine disponibile, quale lotto può essere impostato, e lo confronto con il lotto minimo, e se è minore, allora l'operazione è definitivamente conclusa.
Grazie, Valery!
Saluti, Vladimir.
Ed ecco i primi risultati della funzione:
Sarebbe interessante sapere di cosa si tratta? Non nel senso della traduzione in russo, perché l'ho già tradotta:
ma nel senso di come si può cambiare un account? Qualcuno può dirmi cosa diavolo sta succedendo al mio account e cosa fare in questi casi?
Forse è in qualche modo collegato al fatto che sono passato temporaneamente dal conto reale a quello demo?
Saluti, Vladimir.
Forse è in qualche modo collegato al fatto che sono passato temporaneamente dal conto reale a quello demo?
Sì
Grazie, Sergey, ora lo saprò.
Saluti, Vladimir.
L'Expert Advisor utilizza un indicatore sul TF specificato, come posso scoprire il TF dall'handle dell'indicatore?
Non capisco, il TF specificato dovrebbe essere noto. È necessario spiegare meglio la situazione.