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

 
Aleksey Mavrin :

Bir test cihazından mı bahsediyorsunuz yoksa çevrimiçi mi?

çevrimiçiyse - move olayının normal şekilde iletilmediği koda bakın. Bu arada sitede sadece beş farklı kütüphane var, neden bahsediyorsunuz?

Ve test cihazında - hiçbir şekilde görünmüyor ve neden.

TÜM panel nesnelerine taşıma komutlarını gönderdikten sonra ChartRedraw() yapın.
 
Aleksey Mavrin :

Bir test cihazından mı bahsediyorsunuz yoksa çevrimiçi mi?

çevrimiçiyse - taşıma olayının normal şekilde iletilmediği koda bakın. Bu arada sitede sadece beş farklı kütüphane var, neden bahsediyorsunuz?

Ve test cihazında - hiçbir şekilde görünmüyor ve neden.

İnternetle ilgili. Test cihazında buna gerçekten ihtiyacım yok. Sana kütüphaneler hakkında cevap veremem, programlamada tam bir acemiyim. Düğme kodunu MQL5 referansından yeni aldım.

Test cihazında kullanabilmek için düğme hareket komutlarını OnTick işlevine ekledim . Bu, muhtemelen bir sonraki tıklamada düğme konumunun güncellenmesinin nedenidir. Düğmelerin arka planla nasıl hareket ettirileceğini anlamıyorum.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Artyom Trishkin :
TÜM panel nesnelerine taşıma komutlarını gönderdikten sonra ChartRedraw() yapın.
Bunu yapmayı denedim ama yardımcı olmadı.
   ObjectSetInteger ( 0 , "Buy" ,             OBJPROP_XDISTANCE , x + 2 );
   ObjectSetInteger ( 0 , "Buy" ,             OBJPROP_YDISTANCE , y + 2 );
   ChartRedraw ();
  
   ObjectSetInteger ( 0 , "Sell" ,           OBJPROP_XDISTANCE , x + 74 );
   ObjectSetInteger ( 0 , "Sell" ,           OBJPROP_YDISTANCE , y + 2 );
   ChartRedraw ();
 
Lütfen çözmeme yardım et. İşlem panelinin bekleyen bir Buy Stop emri açması ve emrin çalışmaması durumunda takip etmesi için bir kod vardır. Sipariş açılır, ancak sipariş değiştirilmez, günlükte hiçbir hata görünmez ve siparişi değiştirme girişimi de yoktur. Şu işlevi kullanarak, hatanın hangi aşamada oluştuğunu günlüğü takip etmeye çalıştım:
 Print ( "Ордер Выбран!" );

Her if koşulundan sonra ekledim.

Sonuç olarak, işlevin şu olduğunu öğrendim:

 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
           if (aorder.SelectByIndex(i))  

daha fazla çalışma için bir siparişi başarıyla seçer ve eğer Print(" Sipariş Seçildi!"); bu koddan sonra yapıştırın :

 if (aorder. Symbol ()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOp
en())

sonra bir hata oluşur:

2020.06.17 01:38:24.136 2020.01.02 07:40:00 başarısız sipariş #2 satın alma stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Geçersiz fiyat]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: #2'yi 1.00000'de değiştirin (sl: 1.00000 tp: 1.00000) [geçersiz fiyat]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 SATIN AL DURDUR değişikliği başarısız oldu! Sonuç Retcode: 10015, Retcode açıklaması: geçersiz fiyat

Aynı kodu otomatik ticaret için başka bir Expert Advisor'da kullanıyorum (tek fark şudur:

 ObjectGetInteger ( 0 , "Buy Stop" , OBJPROP_STATE ) == true


) ve hiçbir sorun yok. Emirler sorgusuz sualsiz açılır ve değiştirilir.

İşte kodun kendisi:

     double Ask          = NormalizeDouble (PriceInformation_High_Buy[HighestCandle_High_Buy].high, _Digits ) + indent; // максимум самой высокой свечи плюс отступ
     double sl_buy       = NormalizeDouble (PriceInformation_Low_Buy[LowestCandle_Low_Buy].low, _Digits ) - indent;     // минимум самой низкой свечи минус отступ  
     double tp_buy       = Ask + ((Ask - sl_buy) * Профит_фактор);                                                     // количество стопов лоссов 
     
     if   ( OrdersTotal ()== 0 && PositionsTotal ()== 0 &&                                          // проверка на наличие открытых позиций и ордеров
     ObjectGetInteger ( 0 , "Buy Stop" , OBJPROP_STATE ) == true )                                 // проверка состояния кнопки
                                                                                             
     {
        atrade.BuyStop(Lots, Ask, _Symbol , sl_buy, tp_buy, ORDER_TIME_GTC , 0 , "My comment" ); // посылаем ордер Buy Stop
        ObjectSetInteger ( 0 , "Buy Stop" , OBJPROP_STATE , false );                               // отжимаем кнопку
     }

     else

     ObjectSetInteger ( 0 , "Buy Stop" , OBJPROP_STATE , false );                                  // отжимаем кнопку
       
//---Трейлинг Buy Stop---------------------------------------------------------------------------------------------------------------------------//     
      
         for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
           if (aorder.SelectByIndex(i))                                                                       // выбираем ордер 
       
             if (aorder. Symbol ()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen()) // проверяем символ, мэджик номер, цену
               
              {
                 if (aorder.OrderType()== ORDER_TYPE_BUY_STOP )
                 Print ( "Ордер Выбран!" ); 
                 if (aorder.PriceCurrent()<aorder.PriceOpen())
                 
                    {
                     if (atrade.OrderModify(aorder.Ticket(),
                        asymbol.NormalizePrice(Ask),
                        asymbol.NormalizePrice(sl_buy),
                        asymbol.NormalizePrice(tp_buy),
                        aorder.TypeTime(),
                        aorder.TimeExpiration()))
                         Print ( "Модификация BUY STOP прошла успешно! Тикет ордера = " ,atrade.ResultOrder());
                     else
                         Print ( "Модификация BUY STOP прошла с ошибкой! Result Retcode: " ,atrade.ResultRetcode(),
                               ", description of Retcode: " ,atrade.ResultRetcodeDescription());
                    }
              }

Lütfen bana hatamın ne olduğunu söyle?

 
Mikhail :

İnternetle ilgili. Test cihazında buna gerçekten ihtiyacım yok. Sana kütüphaneler hakkında cevap veremem, programlamada tam bir acemiyim. MQL5 referansından hazır düğme kodunu yeni aldım.

Test cihazında kullanabilmek için düğme hareket komutlarını OnTick işlevine ekledim . Bu, muhtemelen bir sonraki tıklamada düğme konumunun güncellenmesinin nedenidir. Düğmelerin arka planla nasıl hareket ettirileceğini anlamıyorum.

Ve bir sonrakinde tam olarak ne olduğunu ne kadar ilginç belirlediniz, o değil mi?)

 
Mikhail :
Lütfen çözmeme yardım et. İşlem panelinin bekleyen bir Buy Stop emri açması ve emrin çalışmaması durumunda takip etmesi için bir kod vardır. Sipariş açılır, ancak sipariş değiştirilmez, günlükte hiçbir hata görünmez ve siparişi değiştirme girişimi de yoktur. Şu işlevi kullanarak, hatanın hangi aşamada oluştuğunu günlüğü takip etmeye çalıştım:

Her if koşulundan sonra ekledim.

Sonuç olarak, işlevin şu olduğunu öğrendim:

daha fazla çalışma için bir siparişi başarıyla seçer ve eğer Print(" Sipariş Seçildi!"); bu koddan sonra yapıştırın :

sonra bir hata oluşur:

2020.06.17 01:38:24.136 2020.01.02 07:40:00 başarısız sipariş #2 satın alma stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Geçersiz fiyat]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: #2'yi 1.00000'de değiştirin (sl: 1.00000 tp: 1.00000) [geçersiz fiyat]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 SATIN AL DURDUR değişikliği başarısız oldu! Sonuç Retcode: 10015, Retcode açıklaması: geçersiz fiyat

Aynı kodu otomatik ticaret için başka bir Expert Advisor'da kullanıyorum (tek fark şudur:


) ve hiçbir sorun yok. Emirler sorgusuz sualsiz açılır ve değiştirilir.

İşte kodun kendisi:

Lütfen bana hatamın ne olduğunu söyle?

Açıkçası Normalize normal çalışmıyor. bire yuvarlar. asymbol.Digits() asymbol.TickSize(),..Point() kontrolünü yazdırın.

 

Hepinize iyi günler. Expert Advisor DLL dosyasına eriştiğinde aşağıdaki sorunla karşılaştım:

'C:\....\shablon.dll' yüklenemiyor [487]

487 hatası şu anlama geliyor gibi görünüyor: ERROR_INVALID_ADDRESS, ancak kitaplık yolu doğru. Aslında, bu dll'yi zaten tüm klasörlere koydum, yardımcı olmuyor.

Ne yanlış olabilir? Yardım için minnettar olacağım.


Not: Bu dll, başlangıçta 32-bit Windows için tasarlanmıştı ve mt4 * 86'da çalışıyordu. 64 bit için yeniden derledim, şimdi mt5 * 64'e koydum ve problemler bunlar.



 
Aleksey Mavrin :

Ve bir sonrakinde tam olarak ne olduğunu ne kadar ilginç belirlediniz, o değil mi?)

Yeni bir onay işareti gelene kadar düğmeler hareket etmez. Benim gözlerimle gördüğüm bu. Fiyat değişir değişmez düğmeler hareket etti.

Her ne kadar bugün, yeni bir kene üzerinde bile, hiçbir şeyi değiştirmememe rağmen, düğmeler yeniden çizilmeyi bıraktı. Sadece arka plan hareket eder.
 
Aleksey Mavrin :

Açıkçası Normalize normal çalışmıyor. bire yuvarlar. asymbol.Digits() asymbol.TickSize(),..Point() kontrolünü yazdırın.

Böyle bir istekte bulunduğumda:

 Print (" Symbol ", _Symbol , " Digits ", _Digits , " Point ", Point ());

Bu sonucu alıyorum:

2020.06.17 13:49:53.270 2020.01.02 06:50:00 Sembol EURUSD_i Basamaklar 5 Nokta 1e-05

Böyle bir istekte bulunduğumda:

 Print (" Symbol ",aorder.Symbol(), " Digits ", asymbol. Digits (), " Point ", asymbol.TickSize());

Bu sonucu alıyorum:

2020.06.17 13:51:58.787 2020.01.02 06:45:00 Sembol EURUSD_i Basamak 0 Puan 0.0

Aynı zamanda şunu da belirtmek isterim ki Yazdır işlevini eklemezsem hiçbir hata oluşmaz, düzen değiştirilmeye bile çalışmaz. CTrade siparişimi görmüyor gibi.

Sembol ve sihirli sayı olup olmadığını kontrol edin:

 Print ( "Symbol " , asymbol.Name(), " Magic " , aorder.Magic(), " Ticket ", aorder.Ticket()); 

Sonuç:

2020.06.17 14:37:38.147 2020.01.02 06:50:00 Symbol Magic 0 Bilet 2

Sihir, euro dolar sembolü olan 12345 olmalıdır.

Neden sembolü ve sihri alamıyorum?

Eğer çizgi:

aorder. Symbol ()==asymbol.Name()

değişmek

aorder. Symbol ()== _Symbol

ve sihirli sayıya göre çeki kaldırın, o zaman fiyatlarda sorun var

2020.06.17 01:38:24.136 2020.01.02 07:40:00 sipariş #2 değiştirilemedi al stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Geçersiz fiyat]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: 1.00000'de #2'yi değiştirin (sl: 1.00000 tp: 1.00000) [geçersiz fiyat]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP değişikliği başarısız oldu! Sonuç Retcode: 10015, Retcode açıklaması: geçersiz fiyat

Ben zaten kafamı kırdım. başka bir danışmandaki aynı kodun bir patlama ile çalışmasına rağmen.

Neyi yanlış yapıyorum?

Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Данные типа double выводятся с точностью до 16 десятичных цифр после точки, при этом данные могут выводиться либо в традиционном либо в научном формате – в зависимости от того, как запись будет наиболее компактна. Данные типа float выводятся с 5 десятичными цифрами после точки. Для вывода вещественных чисел с другой точностью либо в явно...
 
dozolov :

Hepinize iyi günler. Expert Advisor DLL dosyasına eriştiğinde aşağıdaki sorunla karşılaştım:

'C:\....\shablon.dll' yüklenemiyor [487]

487 hatası şu anlama geliyor gibi görünüyor: ERROR_INVALID_ADDRESS, ancak kitaplığın yolu doğru. Aslında, bu dll'yi zaten tüm klasörlere koydum, yardımcı olmuyor.

Ne yanlış olabilir? Yardım için minnettar olacağım.


Not: Bu dll, başlangıçta 32-bit Windows için tasarlanmıştı ve mt4 * 86'da çalışıyordu. 64 bit için yeniden derledim, şimdi mt5 * 64'e koydum ve problemler bunlar.



ERROR_INVALID_ADDRESS yolla ilgili değil. Yanlış argümanları geçiyorsun.