{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory (Request);
ZeroMemory (Results);
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
Request.action= TRADE_ACTION_DEAL ;
Request.type= ORDER_TYPE_SELL ;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res= false ;
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
}
Geçenlerde siparişlerin yeniden açılması konusunu gündeme getirdim. Çünkü sorunu çözdüğümü sanıyordum. Bir hafta boyunca her şey çok iyi çalıştı. Ancak bugün sadece açarken benzer bir sorunla karşılaştım.
Finam'da, Açılış 9'da birçok emir açıldı... gerçi her durumda sadece bir emir açılmış olmalıydı.
İşte EA'dan bir kod parçası
{
Coment=" Open Sell "+ string (OpenOrders+ 1 );
ret=OpenSellPosition( _Symbol ,volume,Coment,Sleeppage,Filling);
}
if (ret)
{
OpenOrders++;
PriceLastOpen=price;
}
bool OpenSellPosition( string symbol, double volume, string comment="", ulong deviation= 10 , ENUM_ORDER_TYPE_FILLING filling= ORDER_FILLING_FOK )
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory (Request);
ZeroMemory (Results);
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
Request.action= TRADE_ACTION_DEAL ;
Request.type= ORDER_TYPE_SELL ;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res= false ;
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
}
onlar. Başarılı bir işlemden sonra , başlangıçta 0'a eşit olan OpenOrders değişkeninin arttığı koddan görülebilir.
ve 0'dan büyükse, o zaman siparişin başka açılması olmamalıdır, ancak sipariş yığınının tamamı Sipariş1 yorumuyla açıktır.
Bir sipariş açma işlevinde, olumlu bir yanıt olup olmadığını ve bir sipariş biletinin alınıp alınmadığını kontrol ediyorum , ancak bir nedenden dolayı bu işlev, siparişin gerçekten ayarlanmış olmasına rağmen false döndürüyor.
Neyin yanlış olduğunu açıklayın, bu problem nasıl çözülür?
Kötü kalıtım Forex.
Sonuçları kontrol etmeniz gerekir. sipariş.
Bir sipariş verilmişse, bu bir anlaşmanın yapılmış olduğu anlamına gelmez.
Kötü kalıtım Forex.
Sonuçları kontrol etmeniz gerekir. sipariş.
Bir sipariş verilmişse, bu bir anlaşmanın yapılmış olduğu anlamına gelmez.
Anlaşmayla ilgili bilgilerin henüz ulaşmadığını varsayıyorum. Burada ( kırmızı ile vurgulanmıştır) Şansa güveniyorsunuz. Ve o kaprisli bir bayan :-))
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory (Request);
ZeroMemory (Results);
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
Request.action= TRADE_ACTION_DEAL ;
Request.type= ORDER_TYPE_SELL ;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res= false ;
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
}
Anlaşmayla ilgili bilgilerin henüz ulaşmadığını varsayıyorum. Burada ( kırmızı ile vurgulanmıştır) Şansa güveniyorsunuz. Ve o kaprisli bir bayan :-))
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory (Request);
ZeroMemory (Results);
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
Request.action= TRADE_ACTION_DEAL ;
Request.type= ORDER_TYPE_SELL ;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res= false ;
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
}
Tüm ticaret işlemlerini kaydetmeniz gerekir. Örneğin şöyle:
ilk olarak, "başlıkta" CTrade ticaret sınıfını bağlarız
CTrade m_trade; // trading object
ve işte bir Satın Alma işlemi örneği:
{
if (m_trade.ResultDeal()== 0 )
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print ("Buy -> true . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
yani, iki kez hata alabilirsiniz: ilk seviye - işlem temel kontrolü geçmedi ve ikinci savunma seviyesi - işlem biletini kontrol etme .
Daha sonra, eğer bir bindirme varsa, bunu loglardan anlamak mümkün olacaktır.
Eklendi: Yukarıdaki, SENKRON çalışma modu için geçerlidir.
Şu anda ve burada gurular öğretecek))
Объясните что не так, как решить данную проблему?
Tecrübenle, burada bu tür soruları sormak uygun değil.
Tüm işlemleri kaydetmeniz gerekir. Örneğin şöyle:
ilk olarak, "başlıkta" CTrade ticaret sınıfını bağlarız
CTrade m_trade; // trading object
ve işte bir Satın Alma işlemi örneği:
{
if (m_trade.ResultDeal()== 0 )
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print ("Buy -> true . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
yani, iki kez hata alabilirsiniz: ilk seviye - işlem temel kontrolü geçmedi ve ikinci savunma seviyesi - işlem biletini kontrol etme .
Daha sonra, eğer bir bindirme varsa, bunu loglardan anlamak mümkün olacaktır.
Eklendi: Yukarıdaki, SENKRON çalışma modu için geçerlidir.
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
Tüm ticaret işlemlerini kaydetmeniz gerekir. Örneğin şöyle:
ilk olarak, "başlıkta" CTrade ticaret sınıfını bağlarız
CTrade m_trade; // trading object
ve işte bir Satın Alma işlemi örneği:
{
if (m_trade.ResultDeal()== 0 )
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print ("Buy -> true . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
yani, iki kez hata alabilirsiniz: ilk seviye - işlem temel kontrolü geçmedi ve ikinci savunma seviyesi - işlem biletini kontrol etme .
Daha sonra, eğer bir bindirme varsa, bunu loglardan anlamak mümkün olacaktır.
Eklendi: Yukarıdakiler SENKRON çalışma modu için geçerlidir.
Yani tam olarak bunu yaptım
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Geçenlerde siparişlerin yeniden açılması konusunu gündeme getirdim. Çünkü sorunu çözdüğümü sanıyordum. Bir hafta boyunca her şey çok iyi çalıştı. Ancak bugün sadece açarken benzer bir sorunla karşılaştım.
Finam'da, Açılış 9'da birçok emir açıldı... gerçi her durumda sadece bir emir açılmış olmalıydı.
İşte EA'dan bir kod parçası
{
Coment=" Open Sell "+ string (OpenOrders+ 1 );
ret=OpenSellPosition( _Symbol ,volume,Coment,Sleeppage,Filling);
}
if (ret)
{
OpenOrders++;
PriceLastOpen=price;
}
bool OpenSellPosition( string symbol, double volume, string comment="", ulong deviation= 10 , ENUM_ORDER_TYPE_FILLING filling= ORDER_FILLING_FOK )
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory (Request);
ZeroMemory (Results);
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
Request.action= TRADE_ACTION_DEAL ;
Request.type= ORDER_TYPE_SELL ;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res= false ;
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
}
onlar. Başarılı bir işlemden sonra , başlangıçta 0'a eşit olan OpenOrders değişkeninin arttığı koddan görülebilir.
ve 0'dan büyükse, o zaman siparişin başka açılması olmamalıdır, ancak sipariş yığınının tamamı Sipariş1 yorumuyla açıktır.
Bir sipariş açma işlevinde, olumlu bir yanıt olup olmadığını ve bir sipariş biletinin alınıp alınmadığını kontrol ediyorum , ancak bir nedenden dolayı bu işlev, siparişin gerçekten ayarlanmış olmasına rağmen false döndürüyor.
Neyin yanlış olduğunu açıklayın, bu problem nasıl çözülür?