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

 
Aleksey Vyazmikin :

Teşekkür ederim! aradım bulamadım...

Sonra bir sonraki soru, diyelim ki adım 25, o zaman 25'in katlarına yuvarlama nasıl organize edilir, bir fonksiyon olabilir mi?

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinfonormalizeprice

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

Teşekkürler, ancak standart ticaret kitaplığını kullanmıyorum.

 
Vladislav Andruschenko :
Kod yok, yorum yok.

Evet, garip. Dosyayı ekledim ama kontrol etmedim. Suçlu. Şimdi hem kodu hem de test cihazının [Geçersiz duraklar] ile bir satır yayınladığı koddan bir alıntı ekliyorum. Bu kod parçasında, bir pozisyonu değiştirirken MqlTradeRequest yapısının nasıl çalıştığını anlamak istiyorum. Benim durumumda, SAR'daki durağı değiştirirken. Ancak test kullanıcısının mesajından kurtulamıyorum [Geçersiz duraklar]. RTS Ekleme aracı.

 //+------------------------------------------------------------------+
//| Модификация Stop Loss открытой позиции                           |
//+------------------------------------------------------------------+
//--- объявление запроса и результата
   MqlTradeRequest request;
   MqlTradeResult   result;

   int total= PositionsTotal (); // количество открытых позиций  
   Print ( "total = " ,total, " " );
//--- перебор всех открытых позиций
   for ( int i= 0 ; i<total; i++)
     {
       if ( PositionSelect ( _Symbol )== true ) // есть открытая позиция
        {
         //--- параметры ордера
         ulong   position_ticket= PositionGetTicket (i); // тикет позиции
         string position_symbol= PositionGetString ( POSITION_SYMBOL ); // символ 
         int     digits=( int ) SymbolInfoInteger (position_symbol, SYMBOL_DIGITS ); // количество знаков после запятой
         ulong   magic= PositionGetInteger ( POSITION_MAGIC ); // MagicNumber позиции

         if ( PositionSelect (position_symbol)) // если позицию удалось выделить, значит - позиция существует
           {
             //--- обнуление значений запроса и результата
             ZeroMemory (request);
             ZeroMemory (result);
             //--- установка параметров операции
            request.action = TRADE_ACTION_SLTP ;   // тип торговой операции
            request.position = position_ticket;   // тикет позиции
            request.symbol = position_symbol;     // символ 
            request.sl= STP;                       // Stop Loss позиции
            request.tp = 0 ;                       // Take Profit позиции

             //--- отсылаем ордер
             int number= OrderSend (request,result);
             // анализируем код возврата торгового сервера
             if (result.retcode== 10009 || result.retcode== 10008 ) //Request is completed or order placed
              {
               Alert ( "Ордер Sell успешно помещен, тикет ордера # " ,result.order, " " );
              }
             else
              {
               Alert ( "Запрос на установку ордера Sell не выполнен - код ошибки:" , GetLastError ());
               return ;
              }
           }
        }
     }
Dosyalar:
SAR_SAR.mq5  27 kb
 
DCodec :

Evet, garip. Dosyayı ekledim ama kontrol etmedim. Suçlu. Şimdi hem kodu hem de test cihazının [Geçersiz duraklar] ile bir satır yayınladığı koddan bir alıntı ekliyorum. Bu kod parçasında, bir pozisyonu değiştirirken MqlTradeRequest yapısının nasıl çalıştığını anlamak istiyorum. Benim durumumda, SAR'daki durağı değiştirirken. Ancak test kullanıcısının mesajından kurtulamıyorum [Geçersiz duraklar]. RTS Ekleme aracı.

Bu, ilk bakışta, bir hata aramanız gereken kod parçası değildir. Burada sadece üç kez aynı pozisyonun seçilmesi can sıkıcıdır. Çok fazla.

Yanlış duraklarda hata var muhtemelen bu durakların hesaplandığı yerden aramaya başlamanız gerekiyor.

 
DCodec :

Evet, garip. Dosyayı ekledim ama kontrol etmedim. Suçlu. Şimdi hem kodu hem de test cihazının [Geçersiz duraklar] ile bir satır yayınladığı koddan bir alıntı ekliyorum. Bu kod parçasında, bir pozisyonu değiştirirken MqlTradeRequest yapısının nasıl çalıştığını anlamak istiyorum. Benim durumumda, SAR'daki durağı değiştirirken. Ancak test kullanıcısının [Geçersiz duraklamalar] mesajından kurtulamıyorum. RTS Ekleme aracı.

Tam bir anlayış için, ne tür bir hesap hadge veya netleştirmenin ne olduğunu açıklığa kavuşturmak gerekir.

Hesap türünün hadge olması kaydıyla bilgi alma

 if ( PositionSelect ( _Symbol )== true ) // есть открытая позиция

Pozisyonu sembole göre seçtik, AMA görmeyi hayal ettiğiniz konum olmayabilir...

 ulong   position_ticket= PositionGetTicket (i); // тикет позиции

Ve şimdi tam olarak ihtiyacımız olan pozisyonu seçtik.

İşlev, açık pozisyonlar listesinde dizine göre bir pozisyon bileti döndürür ve fonksiyonları kullanarak daha fazla çalışmak için bu pozisyonu otomatik olarak seçer


Ardından istediğiniz konumu seçmeyi tekrar deneyin

 if ( PositionSelect (position_symbol)) // если позицию удалось выделить, значит - позиция существует

Ve yine, yanlış konumun seçilme olasılığı çok yüksektir.

Pozisyonların bağımsız temsili ile (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), her bir sembol için aynı anda birkaç pozisyon açılabilir. Bu durumda PositionSelect en küçük bilet ile pozisyonu seçecektir.


Bu durumda OrderSend() işlevinin nasıl davrandığını kontrol etmek için, bunu yapmanız ve kontrol etmeniz gerekir, ancak bunu olması gerektiği gibi yapmak daha iyidir ve hata ortadan kalkmadıysa, yalnızca hata kodunu değil, aynı zamanda pozisyon bileti, pozisyon fiyatı, yeni stop fiyatı ve al. Asgari.

 
Alexey Viktorov :

Tam bir anlayış için, ne tür bir hesap hadge veya netleştirmenin ne olduğunu açıklığa kavuşturmak gerekir.

Yorumlar için teşekkürler. net hesap türü. RTS Ekleme aracı. Bütün zorluk bu mu? Karakter başına bir pozisyon. Herhangi bir yolu seçebilirsiniz, yine de bu pozisyona geleceksiniz. Bunlar bekleyen emirler değil mi? Bu nedenle, hala anlamıyorum - YANLIŞ NEDİR ??? Tüm seçenekleri denedim.

 
DCodec :

Yorumlar için teşekkürler. net hesap türü. RTS Ekleme aracı. Bütün zorluk bu mu? Karakter başına bir pozisyon. Herhangi bir yolu seçebilirsiniz, yine de bu pozisyona geleceksiniz. Bunlar bekleyen emirler değil mi? Bu nedenle, hala anlamıyorum - YANLIŞ NEDİR ??? Tüm seçenekleri denedim.

Ve bunun bir cevabı olmayacak mı?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5

Alexey Viktorov , 2017.11.22 09:29

Bu durumda OrderSend() işlevinin nasıl davrandığını kontrol etmek için, bunu yapmanız ve kontrol etmeniz gerekir, ancak bunu olması gerektiği gibi yapmak daha iyidir ve hata ortadan kalkmadıysa , yalnızca hata kodunu değil, aynı zamanda pozisyon bileti, pozisyon fiyatı, yeni stop fiyatı ve al. Asgari.


 
DCodec :

Bu nedenle, hala anlamıyorum - YANLIŞ NEDİR ??? Tüm seçenekleri denedim.

Bu satırı hatanın oluştuğu yere yapıştırın

 Print (ToString(request) + ToString(result));

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

fxsaber , 2017.02.25 16:27

MqlTrade yapılarını bir dizgeye dönüştürme
#define TOSTRING(A)   #A + " = " + ( string )(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString (A) + " (" + ( string )(A) + ")\n"

string ToString( const MqlTradeTransaction &Trans )
{
   return (TOSTRING(Trans.deal) + TOSTRING(Trans.order) + TOSTRING(Trans.symbol) +
         TOSTRING2(Trans.type) + TOSTRING2(Trans.order_type) + TOSTRING2(Trans.order_state) +
         TOSTRING2(Trans.deal_type) + TOSTRING2(Trans.time_type) +
         TOSTRING(Trans.time_expiration) + TOSTRING(Trans.price) + TOSTRING(Trans.price_trigger) +
         TOSTRING(Trans.price_sl) + TOSTRING(Trans.price_tp) + TOSTRING(Trans.volume) +
         TOSTRING(Trans.position) + TOSTRING(Trans.position_by));
}

string ToString( const MqlTradeRequest &Request )
{
   return (TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) +
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) +
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

string ToString( const MqlTradeResult &Result )
{
   return (TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
         TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +  
         TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +  
         TOSTRING(Result.retcode_external));
}

#undef TOSTRING
#undef TOSTRING2

 
fxsaber :

Bu satırı hatanın oluştuğu yere yapıştırın


Eklendi. İşte test sonucu:

2017.11.22 18:22:51.127 2016.11.09 12:00:00 alış 1.00 RTS Splice at 98080 sl: 94130 (98070 / 98080 / 98070)
2017.11.22 18:22:51.127 2016.11.09 12:00:00 anlaşma #4 1.00 RTS satın al 98080'de Ekleme yapıldı (4 numaralı siparişe göre)
2017.11.22 18:22:51.127 2016.11.09 12:00:00 anlaşma yapıldı [#4 98080'den 1.00 RTS Splice satın al]
2017.11.22 18:22:51.127 2016.11.09 12:00:00 sipariş 98080'de 1.00 satın al [#4 98080'de 1.00 RTS Splice satın al]
2017.11.22 18:22:53.561 2016.11.09 14:05:00 başarısız #4 satın al 1.00 RTS Ekleme sl: 94130, tp: 0 -> sl: 94316, tp: 0 [Geçersiz duraklar]
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Talep.eylem = TRADE_ACTION_SLTP (6)
2017.11.22 18:22:53.576 2016.11.09 14:05:00 İstek.magic = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Talep.sipariş = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 İstek.sembol = RTS Ekleme
2017.11.22 18:22:53.576 2016.11.09 14:05:00 İstek.hacim = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Talep.fiyat = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 İstek.stoplimit = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 İstek.sl = 94316.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 İstek.tp = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 İstek.sapma = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 İstek.türü = ORDER_TYPE_BUY(0)
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.type_filling = ORDER_FILLING_FOK (0)
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.type_time = ORDER_TIME_GTC(0)
2017.11.22 18:22:53.576 2016.11.09 14:05:00 İstek.süre sonu = 1970.01.01 00:00:00
2017.11.22 18:22:53.576 2016.11.09 14:05:00 İstek.yorum =
2017.11.22 18:22:53.576 2016.11.09 14:05:00 İstek.konum = 4
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.position_by = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Sonuç.retkodu = 10016
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Sonuç.anlaşma = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Sonuç.sıra = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Sonuç.hacim = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Sonuç.fiyat = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.bid = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Sonuç.ask = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.comment = Geçersiz duraklar
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.request_id = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.retcode_external = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Uyarı: TP ve SL ile konum değiştirilirken hata oluştu hata kodu: 4756

 
DCodec :

Eklendi. İşte test sonucu:

Sunucu ve test modu?