Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1441

 

Guten Morgen und gute Laune!

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.

Wird dieses Minimum ausreichen, um das Problem mit dem Expert Advisor zu verhindern , das ich vorgestern hatte?

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

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:

   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;   

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:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{ // OnCalculate

ArraySetAsSeries(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
 
Valeriy Yastremskiy #:

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:

2023.02.02 14:41:05.466 Experts automated trading is disabled because the account has been changed
2023.02.02 14:41:09.990 Experts automated trading is enabled
2023.02.02 14:42:43.410 Experts automated trading is disabled because the account has been changed
2023.02.02 14:42:52.690 Experts automated trading is enabled
2023.02.02 14:43:33.882 Experts automated trading is disabled because the account has been changed
2023.02.02 14: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.02 14: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?

Mit freundlichen Grüßen, Vladimir.

 
Grüße, ist es möglich, zu implementieren oder gibt es eine fertige Lösung zu strecken Charts vertikal ohne Grenzen wie in tradingview?
 
MrBrooklin #:

Vielleicht hängt es damit zusammen, dass ich vorübergehend vom Echtgeld- zum Demokonto gewechselt habe?

Ja
 
Sergey Gridnev #:
Ja

Danke, Sergey, jetzt weiß ich Bescheid.

Mit freundlichen Grüßen, Vladimir.

 
Der Expert Advisor verwendet einen Indikator auf dem angegebenen TF, wie kann ich den TF aus dem Indikatorhandle herausfinden?
 
Aleksey Vyazmikin #:
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.

Grund der Beschwerde: