"MQL5'de Alım Satım İşlemleri — Bu Kolaydır" makalesi için tartışma - sayfa 3

 

Bu yapıyı MQL4'ten m_Trade.PositionModify (m_Trade, CTrade sınıfının bir üyesidir) kullanarak uygulamanın mümkün olup olmadığını söyleyebilir misiniz?

...
if(TrendUp==true) 
   for(int i=0; i<10; i++)
      {
        ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0);
        if(ticket>0 && i<9) OrderModify(ticket,0,0,Ask+SPS*take_koef[i],0);
      };
...

Komut dosyasının amacı, belirli sayıda lot ile piyasada bir alım açmak ve ardından 10 parça halinde bir kar almaktır. Bir stop loss ayarlamadan PositionModify'ın 10016 hatası verdiği gerçeğine takıldım(İstekte yanlış stoplar). Ve durdurma ayarlamak için bir görev yok :). Yardımda bir değer belirtmemenin mümkün olduğu yazıyor:

Параметры

symbol

[in]  Наименование торгового инструмента, по которому предполагается модифицировать позицию.

sl

[in]  Новая цена, по которой сработает Stop Loss (либо, если изменение не нужно, предыдущее значение).

tp

[in]  Новая цена, по которой сработает Take Profit (либо, если изменение не нужно, предыдущее значение).

Önceki satın alma talebinden elde edilen değeri (tabii ki sıfır var) geçmeye çalıştım, sadece profilde aynı komisyon. İşte benim kodum:

...
         m_Trade.Buy(Lots);// tüm hacmi piyasadan satın alın
         if(m_Trade.ResultRetcode()==10008)//satın alma işlemi başarılı olursa, çıkışları ayarlayarak konumu değiştirin
           {
            S="Başvuru tamamlandı. Sipariş numarası: "+IntegerToString(m_Trade.RequestOrder());
            Comment(S);
            sl=m_Trade.RequestSL();// son istekten itibaren zararı durdurun
            for(int i=0;i<=10;i++)
              {
               if(m_Trade.PositionModify(symbol,sl,Ask+SPS*take_koef[i]))
                 {
                  S+="Snap Takedown: "+IntegerToString(i);
                  Comment(S);
                 }
               else
                 {
                  S+="SnPosition change error with code: "+IntegerToString(m_Trade.ResultRetcode());
                  Comment(S);
                  return(4);
                 };
              };
...

Yardımlarınız için şimdiden teşekkür ederim.

[Silindi]  
Bu, EA programlamanıza başlamak için BÜYÜK bir yardımdır.
 

MQL5'te Nesne Yönelimli Programlamaya İyi Bir Giriş.

MT5 build 1347 ile ilk kod örneği "illegal switch expression type" hatası ile derlenemiyor.

Çalışmasını sağlamak için AccountInfo.mqh'deki switch ifadelerinde int'e döküm eklemek zorunda kaldım:

switch((int)MarginMode())

 
Николай Осипов:

Merhaba,
RTS-3.13 (RIH3) vadeli işlemlerinde işlem yapmak için kodda BuyStop işlevini kullanırken, bir hata oluşmaya devam ediyor :
10022 TRADE_RETCODE_INVALID_EXPIRATION - Geçersiz emir vade tarihi


Nicholas, selamlar. Bu sorunu çözmüş olma ihtimalin var mı? RTS-6.17'de aynı zorlukları yaşıyorum, nasıl çözeceğimi anlamıyorum.
 
Rashid Zeynalov:
RTS-3.13 Opening-demo'da benzer sorun, her şeyi denedim (limit emirleri sembol profilinde yazıldığı gibi ORDER_TIME_SPECIFIED_DAY olarak ayarlanmışken) !!!!. Satın alma-stop emri piyasada manuel olarak mükemmel bir şekilde açıkken. Bu bir terminal hatasıdır, geliştiricilere yazmalısınız
Rashid, merhaba. Bu sorunu çözme şansınız var mı? RTS-6.17 üzerinde gerçek Open üzerinde aynı zorlukları yaşıyorum.

 
sgtkachev:
Rashid, merhaba. Bu sorunu çözme şansınız var mı? RTS-6.17 üzerinde gerçek Open üzerinde aynı zorlukları yaşıyorum.

Üzgünüm, soruyu fark etmedim. Bu dosyayı değiştirmeyi deneyin ve sonucu bildirin lütfen.
Dosyalar:
Trade.mqh  68 kb
 

Merhaba

Bazı brokerlerde (örneğin FoxPro) bir pozisyon açmaya çalışırken hata 10030. Kod açıklaması: geçersiz dolum. Diğer brokerlerde (örneğin Alpari) bu satırlar olmadan çalışır

Uzman Danışmanın başlatma bloğunda kodda farklı değerler yazdı:

trade.SetTypeFilling(SYMBOL_FILLING_FOK);

или
trade.SetTypeFilling(SYMBOL_FILLING_IOC);

или

trade.SetTypeFilling(ORDER_FILLING_RETURN);

Yardımcı olmuyor. Sorun nasıl çözülür? Yoksa bu CTrade sınıfı eski ve en son terminal güncellemelerine karşılık gelmiyor ve yapı aracılığıyla standart şemaya göre ticaret işlemleri yazmam mı gerekiyor?


UPD: Rashid yukarıda bir kütüphane dosyası yayınladı, sorunumu çözdü. Standart kütüphanede bir hata olması üzücü. Şimdi, her şeyin çalışması için kütüphaneyi değiştirmeden doğrudan EA'da bazı değişiklikler yapmanın mümkün olup olmadığını görmek için karşılaştırmayı inceleyeceğim

Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
  • www.metatrader5.com
В платформу встроена система автоматического обновления. Она позволяет своевременно получать и устанавливать новые версии программы. Эту систему...
 
İyi
 
makk:

MQL5'te Nesne Yönelimli Programlamaya İyi Bir Giriş.

MT5 build 1347 ile ilk kod örneği "illegal switch expression type" hatası ile derlenemiyor.

Çalışmasını sağlamak için AccountInfo.mqh'deki switch ifadelerinde int'e döküm eklemek zorunda kaldım:

switch((int)MarginMode())

 

Merhaba, Bu çok yararlı gönderi için teşekkürler ve lütfen bunu çözmeme yardım edin. MT5'te yeniyim ve EA'lar oluşturmayı öğreniyorum, bu yüzden Ctrade.Buy'ı çalıştırmak için örnek kodu kopyaladım ancak geriye dönük test başarısız oldu. İşte daha fazla bilgi:


1) Hesap: NZD olarak temel para birimi olan canlı bir hesap

2) Geriye dönük test için MetaEditor ayarları:

Seçenekler


3) Kod: https://www.mql5.com/tr/articles/481 adresinden kopyalanmıştır :


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

//|                                                         demo.mq5 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

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

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#include<Trade\Trade.mqh>


//--- object for performing trade operations

CTrade  trade;

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

//| Expert initialization function                                   |

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

int OnInit()

  {

   //--- set MagicNumber for your orders identification

   int MagicNumber=123456;

   trade.SetExpertMagicNumber(MagicNumber);

   //--- set available slippage in points when buying/selling

   int deviation=10;

   trade.SetDeviationInPoints(deviation);

   //--- order execution mode

   trade.SetTypeFilling(ORDER_FILLING_RETURN);

   //--- logging mode: it would be better not to declare this method at all, the class will set the best mode on its own

   trade.LogLevel(1);

   //--- what function is to be used for trading: true - OrderSendAsync(), false - OrderSend()

   trade.SetAsyncMode(true);

   //---

   return(0);

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason)

  {

//---

   

  }

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

//| Expert tick function                                             |

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

void OnTick()

  {

   BuySample1();

  }


//--- Buy sample  

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

//|  Buying a specified volume at the current symbol                 |

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

void BuySample1()

  {

//--- 1. example of buying at the current symbol

   if(!trade.Buy(0.1))

     {

      //--- failure message

      Print("Buy() method failed. Return code=",trade.ResultRetcode(),

            ". Code description: ",trade.ResultRetcodeDescription());

     }

   else

     {

      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),

            " (",trade.ResultRetcodeDescription(),")");

     }

//---

  }

4) Hata günlüğü (Lütfen yalnızca EUR/USD üzerinde test ettiğimi unutmayın):

GJ 0 19:36:44.410 127.0.0.1 oturum açma (yapı 1730)

HH 0 19:36:44.420 Ağ 38520 bayt hesap bilgisi yüklendi

JO 0 19:36:44.420 Ağ 1482 bayt test cihazı parametresi yüklendi

QE 0 19:36:44.420 Ağ 188 bayt giriş parametresi yüklendi

FR 0 19:36:44.421 Ağ 443 baytlık sembol listesi yüklendi

IF 0 19:36:44.421 Test uzmanı dosyası eklendi: Experts\demo.ex5. 46684 bayt yüklendi

QH 0 19:36:44.433 Test cihazı ilk depozito 10000.00 NZD, kaldıraç 1:100

JN 0 19:36:44.437 Test cihazı başarıyla başlatıldı

ES 0 19:36:44.437 Ağ 46 Kb toplam başlatma verisi alındı

PP 0 19:36:44.437 Test Cihazı Intel Core i7-4510U @ 2.00GHz, 8103 MB

RJ 0 19:36:44.799 Semboller EURUSD: senkronize edilecek sembol

HR 0 19:36:44.800 Semboller EURUSD: sembol senkronize edildi, 3624 bayt sembol bilgisi alındı

NJ 0 19:36:44.800 Geçmiş EURUSD: geçmiş senkronizasyonu başladı

GO 0 19:36:44.856 Geçmiş EURUSD: 0:00:00.000'da senkronize etmek için 27 bayt geçmiş verisi yükleyin

RQ 0 19:36:44.856 Geçmiş EURUSD: geçmiş 2012.01.01 ile 2017.11.15 arasında senkronize edildi

EF 0 19:36:44.993 Geçmiş EURUSD,Günlük: geçmiş önbelleği 1010 çubuk için ayrıldı ve 2014.01.01 00:00 ile 2014.12.31 00:00 arasında 312 çubuk içeriyor

ND 0 19:36:44.993 Geçmiş EURUSD,Günlük: geçmiş 2014.01.01 00:00'dan başlıyor

OL 0 19:36:44.996 Test Cihazı EURUSD,Günlük (HalifaxPlus-Live): her tik üretiliyor

GN 0 19:36:44.996 Tester EURUSD,Daily: Experts\demo.ex5'in 2015.01.01 00:00'dan 2017.11.15 00:00'a kadar testi başladı

CK 0 19:36:56.288 Semboller NZDUSD: senkronize edilecek sembol

IS 0 19:36:56.288 Semboller NZDUSD: sembol senkronize edildi, 3624 bayt sembol bilgisi alındı

JL 0 19:36:56.288 Geçmiş NZDUSD: geçmiş senkronizasyonu başladı

HJ 0 19:36:56.575 Geçmiş NZDUSD: 0:00:00.078'de senkronize etmek için 14 Kb geçmiş verisi yükleyin

LS 0 19:36:56.575 Geçmiş NZDUSD: geçmiş 2013.01.01 ile 2017.11.15 arasında senkronize edildi

CO 0 19:36:56.579 EURNZD sembolleri: senkronize edilecek sembol

OJ 0 19:36:56.580 Semboller EURNZD: sembol senkronize edildi, 3624 bayt sembol bilgisi alındı

DL 0 19:36:56.580 Geçmiş EURNZD: geçmiş senkronizasyonu başlatıldı

MK 0 19:36:56.656 Geçmiş EURNZD: 0:00:00.000'da senkronize etmek için 27 bayt geçmiş verisi yükle

OD 0 19:36:56.656 Geçmiş EURNZD: geçmiş 2013.01.01 ile 2017.11.15 arasında senkronize edildi

IN 0 19:36:56.665 İşlem 2015.01.02 03:00:00 piyasa alış 0.10 EURUSD (1.20538 / 1.20549 / 1.20538)

PE 0 19:36:56.665 İşlemler 2015.01.02 03:00:00 anlaşma #2 1.20549'da 0.10 EURUSD satın al tamamlandı(sipariş #2'ye göre)

FH 0 19:36:56.666 İşlem 2015.01.02 03:00:00 anlaşma gerçekleştirildi [#2 1.20549'dan 0.10 EURUSD satın al]

OG 0 19:36:56.666 İşlem 2015.01.02 03:00:00 1.20549'da 0.10 alış emri gerçekleştirildi [#2 1.20549'da 0.10 EURUSD alış]

FO 0 19:36:56.670 demo (EURUSD,D1) 2015.01.02 03:00:00 Buy() yöntemi başarıyla çalıştırıldı. Dönüş kodu=10009 (1.20549'da yapıldı)

NM 2 19:37:15.823 Geçmiş NZDUSD 2016.09.21 23:01:00: bozuk geçmiş tespit edildi (s:-73370, o:73433, h:+48, l:-123, c:-117 -- tv:63, rv:11250111)

JF 2 19:37:15.823 Geçmiş NZDUSD 2016.09.21, kötü konteyner bulundu, yeniden senkronize edilmeli

LQ 2 19:37:16.106 Tanımsız işlevde test cihazı geçmiş hatası 9

OH 2 19:37:16.106 Test cihazı '20 NZDUSD' hatası ile test aralığının %0'ında durdu


Lütfen bana sorunun ne olduğunu ve bunu nasıl çözebileceğimi söyleyin?