Unter Berücksichtigung der konstruktiven Kritik habe ich den Code der Check-Funktion geändert:
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);
}
Die Funktionen CheckMoneyForTrade() und CheckVolumeValue() werden nicht gepostet, da sie frei verfügbar sind und von hier übernommen wurden.
Ja, das scheint normal zu sein, aber es ist besser, das Volumen und die Suffizienz in einer Funktion zu prüfen und die Logik der Suffizienz zu ändern. Wir prüfen, ob das Margin-Lot größer oder kleiner ist, aber reduzieren es nicht, wenn das angeforderte Lot kleiner ist, berechne ich auch das Lot in Bezug auf die verfügbare Margin, welches Lot eingestellt werden kann, und vergleiche es mit dem Mindestlot, und wenn es kleiner ist, dann ist der Handel definitiv vorbei.
Guten Tag zusammen! Ich habe einen Indikator Stochastic RSI. Das Problem ist, dass es sehr langsam arbeitet. Soweit ich verstehe, die wichtigsten "Bremsen" schafft dieser Abschnitt wegen der großen Periode, die verwendet wird, um für das Minimum und Maximum in den Arrays zu suchen:
Idealerweise könnte die Lösung sein, wenn der Indikator durch alle Bars in der Geschichte während des ersten Laufs gehen würde, und würde nur die letzte Bar während der nächsten aktualisieren. Aber ich verstehe nicht, wie man das macht. Ist es möglich, dies zu tun? Wenn ja, wäre ich Ihnen dankbar, wenn Sie mir einen Link oder einen Rat geben könnten, wie man das macht.
Hier ist der gesamte Code des Indikators:
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
Ich denke, es ist in Ordnung, aber es ist besser, die Volumen- und Suffizienzprüfung in eine Funktion zu packen und auch die Logik für die Suffizienz zu ändern. Wir prüfen, ob das Margin-Lot mehr oder weniger ist, reduzieren es aber nicht. Wenn das angeforderte Lot weniger ist, berechne ich auch das Lot relativ zur verfügbaren Margin, welches Lot eingestellt werden kann, und vergleiche es mit dem Mindestlot, und wenn es weniger ist, dann ist der Handel definitiv vorbei.
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
Es wäre interessant zu wissen, was das ist? Nicht im Sinne einer Übersetzung ins Russische, da ich sie bereits übersetzt habe:
2023.02.0214:41:05.466 Автоматическая торговля экспертов отключена, так как аккаунт был изменен
sondern in dem Sinne, wie ein Konto geändert werden kann? Kann mir jemand sagen, was zum Teufel mit meinem Konto los ist und was man in solchen Fällen tun kann?
Vielleicht hängt es irgendwie damit zusammen, dass ich vorübergehend vom Real- zum Demokonto gewechselt habe?
Guten Morgen und gute Laune!
Unter Berücksichtigung der konstruktiven Kritik habe ich den Code der Check-Funktion geändert:
Die Funktionen CheckMoneyForTrade() und CheckVolumeValue() werden nicht gepostet, da sie frei verfügbar sind und von hier übernommen wurden.
Wird dieses Minimum ausreichen, um das Problem mit dem Expert Advisor zu verhindern , das ich vorgestern hatte?
Mit freundlichen Grüßen, Vladimir.
Guten Morgen und gute Laune, allerseits!
Unter Berücksichtigung der konstruktiven Kritik habe ich den Code der Prüffunktion geändert:
Die Funktionen CheckMoneyForTrade() und CheckVolumeValue() werden nicht gepostet, da sie frei verfügbar sind und von hier übernommen wurden.
Wird dieses Minimum ausreichen, um das Problem mit dem Expert Advisor zu verhindern , das ich vorgestern hatte?
Mit freundlichen Grüßen, Vladimir.
Ja, das scheint normal zu sein, aber es ist besser, das Volumen und die Suffizienz in einer Funktion zu prüfen und die Logik der Suffizienz zu ändern. Wir prüfen, ob das Margin-Lot größer oder kleiner ist, aber reduzieren es nicht, wenn das angeforderte Lot kleiner ist, berechne ich auch das Lot in Bezug auf die verfügbare Margin, welches Lot eingestellt werden kann, und vergleiche es mit dem Mindestlot, und wenn es kleiner ist, dann ist der Handel definitiv vorbei.
Guten Tag zusammen! Ich habe einen Indikator Stochastic RSI. Das Problem ist, dass es sehr langsam arbeitet. Soweit ich verstehe, die wichtigsten "Bremsen" schafft dieser Abschnitt wegen der großen Periode, die verwendet wird, um für das Minimum und Maximum in den Arrays zu suchen:
Idealerweise könnte die Lösung sein, wenn der Indikator durch alle Bars in der Geschichte während des ersten Laufs gehen würde, und würde nur die letzte Bar während der nächsten aktualisieren. Aber ich verstehe nicht, wie man das macht. Ist es möglich, dies zu tun? Wenn ja, wäre ich Ihnen dankbar, wenn Sie mir einen Link oder einen Rat geben könnten, wie man das macht.
Hier ist der gesamte Code des Indikators:
Ich denke, es ist in Ordnung, aber es ist besser, die Volumen- und Suffizienzprüfung in eine Funktion zu packen und auch die Logik für die Suffizienz zu ändern. Wir prüfen, ob das Margin-Lot mehr oder weniger ist, reduzieren es aber nicht. Wenn das angeforderte Lot weniger ist, berechne ich auch das Lot relativ zur verfügbaren Margin, welches Lot eingestellt werden kann, und vergleiche es mit dem Mindestlot, und wenn es weniger ist, dann ist der Handel definitiv vorbei.
Vielen Dank, Valery!
Mit freundlichen Grüßen, Vladimir.
Und hier sind die ersten Ergebnisse der Funktion:
Es wäre interessant zu wissen, was das ist? Nicht im Sinne einer Übersetzung ins Russische, da ich sie bereits übersetzt habe:
sondern in dem Sinne, wie ein Konto geändert werden kann? Kann mir jemand sagen, was zum Teufel mit meinem Konto los ist und was man in solchen Fällen tun kann?
Vielleicht hängt es irgendwie damit zusammen, dass ich vorübergehend vom Real- zum Demokonto gewechselt habe?
Mit freundlichen Grüßen, Vladimir.
Vielleicht hängt es damit zusammen, dass ich vorübergehend vom Echtgeld- zum Demokonto gewechselt habe?
Ja
Danke, Sergey, jetzt weiß ich Bescheid.
Mit freundlichen Grüßen, Vladimir.
Der Expert Advisor verwendet einen Indikator auf den angegebenen TF, wie kann ich den TF aus dem Indikatorhandle herausfinden?
Das verstehe ich nicht, der angegebene TF sollte bekannt sein. Sie müssen die Situation näher erläutern.