MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1268

 
Beyler, böyle bir soru, cevabını hiçbir yerde bulamadığım. Yeni çubukların açılmaması ve durumum çalışana kadar sıfır çubuğunda işaretlemek için göstergeye hangi işlevi yazmalı, lütfen PM'de cevaplayın))
 

Merhaba!

Üç çama dolanmış:

Sayıları belirledim extern int a =2; dış int b =3; dış int c =4; a, b veya c değiştiğinde, verilen bazı d (örneğin, d=344) ile karşılaştırmak için değerini değiştirecek şekilde a b c sayısını nasıl ayarlayabilirim?

Teşekkür ederim!

 
novichok2018 :

Merhaba!

Üç çama dolanmış:

Sayıları belirledim extern int a =2; dış int b =3; dış int c =4; a, b veya c değiştiğinde, verilen bazı d (örneğin, d=344) ile karşılaştırmak için değerini değiştirecek şekilde a b c sayısını nasıl ayarlayabilirim?

Teşekkür ederim!

x = c + b*10 + a*100

 
Сергей Таболин :

x = c + b*10 + a*100

Gosspadii! Ve kafamı kırıyorum! Teşekkür ederim!

 
Merhaba! 2020.10.03_13:33 GMT+3. MetaTrader 4 için standart Hareketli Ortalama Uzman Danışmanı aldım ve karlı hale gelmesi için değiştirmeye başladım. Strateji test cihazında OrderProfit() işlevini kullanarak bir anlaşmayı kapatmanın koşullarını tanımlamaya çalışırken, EA bu koşulda anlaşmaları kapatmayı durdurdu. Anlaşmayı bitiremez. Ancak, anlaşmayı kapatmak için koşulları doğru yazdığımdan şüpheliyim. Aksi takdirde, danışman anlaşmaları kapatırdı. Muhtemelen işlemin açılış fiyatını ve son fiyatları yazmaya çalışacağım. İşlemin açılış fiyatı ile son fiyat arasındaki maksimum farka ulaşıldıktan ve bu fark azaldıktan sonra işlemi kapatın. Danışman dosyasını ekliyorum. 13:50 GMT+3.
Dosyalar:
 
Николай Никитюк :
Merhaba! 2020.10.03_13:33 GMT+3. MetaTrader 4 için standart Hareketli Ortalama Uzman Danışmanı aldım ve karlı hale gelmesi için değiştirmeye başladım. Strateji test cihazında OrderProfit() işlevini kullanarak bir anlaşmayı kapatmanın koşullarını tanımlamaya çalışırken, EA bu koşulda anlaşmaları kapatmayı durdurdu. Anlaşmayı bitiremez. Ancak, anlaşmayı kapatmak için koşulları doğru yazdığımdan şüpheliyim. Aksi takdirde, danışman anlaşmaları kapatırdı. Muhtemelen işlemin açılış fiyatını ve son fiyatları yazmaya çalışacağım. İşlemin açılış fiyatı ile son fiyat arasındaki maksimum farka ulaşıldıktan ve bu fark azaldıktan sonra işlemi kapatın. Danışman dosyasını ekliyorum. 13:50 GMT+3.
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false ) break ;
       if (OrderMagicNumber()!=MAGICMA || OrderSymbol()!= Symbol ()) continue ;
   //--- check order type
       // 
       if (OrderType()==OP_BUY)
        {
         /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;    
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if (DiffProfit<OrderProfit())     // Исходя из ваших условий, то вот            
           {
             if (!OrderClose(OrderTicket(),OrderLots(),Bid, 3 ,White))
               Print ( "OrderClose error " , GetLastError ());
           }  
         else break ;     
         break ;
        }
       if (OrderType()==OP_SELL)
        {
         /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;     
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if (DiffProfit<OrderProfit())         // Исходя из ваших условий, то вот
           {
             if (!OrderClose(OrderTicket(),OrderLots(),Ask, 3 ,White))
               Print ( "OrderClose error " , GetLastError ());
           }
         else break ;  
         break ;
        }
     }      

//+------------------------------------------------------------------+
 

Merhaba!

Giriş verilerini normalleştirmek için bir fonksiyon yazmayı üstlendi. Ancak orijinal değerleri normalleştirilmiş değerlerle "değiştiremiyorum". Onlar. Açık zaman serisi arabelleğindeki değerleri Temp dizisinden yeni değerlerle güncelleyemiyorum. Benim hatam ne? OOP ve OOP olmayanları geçmeye çalıştığım hissi var))

Open= new CiOpen();
   if ( CheckPointer (Open)== POINTER_INVALID || !Open.Create(Symb.Name(), PERIOD_CURRENT ))
       return ;
//---
   int bars= 10 ;
   double Temp[];                 //Создаем массив для временного хранения входных данных
   ArraySetAsSeries (Temp, true );   //Устанавливает флаг AS_SERIES
   Open.GetData( 0 ,bars,Temp);     //Копируем необходимые данные в массив Temp
   InputNormalize(Temp,bars);     //Нормализуем данные в массиве
 
//---Как заменить значения в Open значениями из Temp?---

  }
//+------------------------------------------------------------------+
//| функция нормализации входных данных                              |
//+------------------------------------------------------------------+
void InputNormalize( double &buffer[], int bars)
  {
   double d1=- 1 ;
   double d2= 1 ;
   double x_min=buffer[ ArrayMinimum (buffer, 0 ,bars)];
   double x_max=buffer[ ArrayMaximum (buffer, 0 ,bars)];
   for ( int i= 0 ; i<bars; i++)
     {
      buffer[i]=(((buffer[i]-x_min)*(d2-d1))/(x_max-x_min))+d1;
     }
   return ;
  }

Eminim daha kolay hale getirilebilir! Bu durumda, lütfen bana öğretin)

 
Aleksei Lesnikov :

Merhaba!

Giriş verilerini normalleştirmek için bir fonksiyon yazmayı üstlendi. Ancak orijinal değerleri normalleştirilmiş değerlerle "değiştiremiyorum". Onlar. Açık zaman serisi arabelleğindeki değerleri Temp dizisinden yeni değerlerle güncelleyemiyorum. Benim hatam ne? OOP ve OOP olmayanları geçmeye çalıştığım hissi var))

Eminim daha kolay hale getirilebilir! Bu durumda, lütfen bana öğretin)

Dil belgelerini okuyun

Önceden tanımlanmış değişkenlerin değeri, yürütme için mql4 programını başlatmadan önce istemci terminali tarafından ayarlanır. Önceden tanımlanmış değişkenler sabittir ve bir mql4 programından değiştirilemez.


Предопределенные переменные - Справочник MQL4
Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Для каждой выполняющейся mql4-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql4-программы на выполнение...
 
Alexey Viktorov :

Dil belgelerini okuyun

Alexey, teşekkürler! Şimdi bunun imkansız olduğu açık.  

Doğru, tam olarak mql4'e sahip değilim. Verileri CiOpen sınıfı aracılığıyla değiştirmeye çalışıyorum. Dizide belirtilen konumda öğeyi değiştirmesi gereken Update yönteminin varlığıyla kafam karıştı.

Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
  • www.mql5.com
CiOpen - Таймсерии - Индикаторы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksei Lesnikov :

Alexey, teşekkürler! Şimdi bunun imkansız olduğu açık.  

Doğru, tam olarak mql4'e sahip değilim. Verileri CiOpen sınıfı aracılığıyla değiştirmeye çalışıyorum. Dizide belirtilen konumda öğeyi değiştirmesi gereken Update yönteminin varlığıyla kafam karıştı.

Soru mql4 bölümünde sorulduğu için mql4 ile ilgili cevap verdim. Sorunuzda mql5 ipucu yok. Ama sonuç aynı.

Neden: