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 ;
}
}
}
}
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.
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.
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.
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.
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.
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
https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinfonormalizeprice
Teşekkürler, ancak standart ticaret kitaplığını kullanmıyorum.
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ı.
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.
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
Pozisyonu sembole göre seçtik, AMA görmeyi hayal ettiğiniz konum olmayabilir...
Ve şimdi tam olarak ihtiyacımız olan pozisyonu seçtik.
Ardından istediğiniz konumu seçmeyi tekrar deneyin
Ve yine, yanlış konumun seçilme olasılığı çok yüksektir.
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.
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.
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.
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.
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 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
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
Eklendi. İşte test sonucu:
Sunucu ve test modu?