Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1441

 

Günaydın ve iyi günler!

Yapıcı eleştirileri dikkate alarak, kontrol fonksiyonunun kodunu değiştirdim:

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);
  }

CheckMoneyForTrade() ve CheckVolumeValue() işlevleri, serbestçe kullanılabildikleri ve buradan alındıkları için yayınlanmamıştır.

Bu minimum, Uzman Danışman ile dünden önceki gün yaşadığım sorunu önlemek için yeterli olacak mı?

Saygılarımla, Vladimir.

 
MrBrooklin #:

Herkese günaydın ve iyi günler!

Yapıcı eleştirileri dikkate alarak, kontrol fonksiyonunun kodunu değiştirdim:

CheckMoneyForTrade() ve CheckVolumeValue() fonksiyonları serbestçe kullanılabildiği ve buradan alındığı için yayınlanmamıştır.

Bu minimum, Uzman Danışman ile önceki gün yaşadığım sorunu önlemek için yeterli olacak mı?

Saygılarımla, Vladimir.

Evet, normal görünüyor, ancak hacmi ve yeterliliği tek bir işlevde kontrol etmek ve yeterlilik mantığını değiştirmek daha iyidir. Teminat lotunun daha büyük veya daha küçük olup olmadığını kontrol ediyoruz, ancak azaltmıyoruz, talep edilen lot daha küçükse, lotu mevcut marjla ilişkili olarak da hesaplıyorum, hangi lot ayarlanabilir ve minimum lotla karşılaştırıyorum ve daha küçükse, o zaman ticaret kesinlikle biter.

 

Herkese iyi günler! Stokastik RSI göstergem var. Sorun şu ki çok yavaş çalışıyor. Anladığım kadarıyla ana "frenler", dizilerdeki minimum ve maksimumları aramak için kullanılan büyük periyot nedeniyle bu bölümü oluşturuyor:

   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;   

İdeal olarak, çözüm, göstergenin ilk çalıştırma sırasında geçmişteki tüm çubuklardan geçmesi ve sonrakiler sırasında yalnızca son çubuğu güncellemesi olabilir. Ama bunu nasıl yapacağımı anlamıyorum. Bunu yapmak mümkün mü? Cevabınız evet ise, nasıl yapılacağına dair bir bağlantı veya tavsiye paylaşırsanız minnettar olacağım.

İşte göstergenin tüm kodu:

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 #:

Bence sorun yok, ancak hacim ve yeterlilik kontrolünü tek bir işleve koymak ve yeterlilik mantığını da değiştirmek daha iyi olur. Teminat lotunun daha fazla mı yoksa daha az mı olduğunu kontrol ediyoruz, ancak azaltmıyoruz, talep edilen lot daha azsa, lotu mevcut teminata göre de hesaplıyorum, hangi lot ayarlanabilir ve minimum lotla karşılaştırıyorum ve daha azsa, o zaman işlem kesinlikle biter.

Teşekkürler, Valery!

Saygılarımla, Vladimir.

 

Ve işte fonksiyonun ilk sonuçları:

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

Bunun ne olduğunu bilmek ilginç olurdu? Rusçaya çeviri anlamında değil, çünkü zaten çevirdim:

2023.02.02 14:41:05.466 Автоматическая торговля экспертов отключена, так как аккаунт был изменен

ama bir hesabın nasıl değiştirilebileceği anlamında? Biri bana hesabıma neler olduğunu ve böyle durumlarda ne yapmam gerektiğini söyleyebilir mi?

Belki de geçici olarak gerçek hesaptan demo hesaba geçmemle bir şekilde bağlantılıdır?

Saygılarımla, Vladimir.

 
Selamlar, tradingview'deki gibi grafikleri sınırsız olarak dikey olarak uzatmak mümkün mü veya hazır bir çözüm var mı?
 
MrBrooklin #:

Belki de geçici olarak gerçek hesaptan demo hesaba geçmemle bir şekilde bağlantılıdır?

Evet
 
Sergey Gridnev #:
Evet

Teşekkürler Sergey, şimdi öğreneceğim.

Saygılarımla, Vladimir.

 
Uzman Danışman belirtilen TF üzerinde bir gösterge kullanıyor, TF'yi gösterge tutamacından nasıl bulabilirim?
 
Aleksey Vyazmikin #:
Uzman Danışman, belirtilen TF üzerinde bir gösterge kullanır, TF'yi gösterge tutamacından nasıl bulabilirim?

Anlamıyorum, belirtilen TF bilinmelidir. Durumu detaylandırmanız gerekiyor.

Neden: