Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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?
do
{
n++;
}
while (! PositionSelectByTicket (tradeResult.deal) && n < 5 );
Ayrıca, kötü olan OrderCheck(Request, checkResult) kontrolünün olmadığını da fark ettim.
Evet ve ayrıca bir piyasa emrinde - fiyat = 0
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID ); unut gitsin
{
MqlTradeRequest request={ 0 };
MqlTradeResult result={ 0 };
order_ticket= 0 ;
request.action = TRADE_ACTION_DEAL ;
request.magic = 9876543211 ;
request.symbol = Symbol ();
request.volume = 1 ;
request.price = 0 ;
request.type= ORDER_TYPE_BUY ;
request.comment= "Sync mode" ;
request.type_filling=ORDER_FILLING_FOK;
request.type_time= ORDER_TIME_DAY ;
if ( OrderSend (request,result))
{
if ((result.retcode== TRADE_RETCODE_DONE ) || (result.retcode== TRADE_RETCODE_PLACED ))
{
if (result.order> 0 )
{
order_ticket=result.order;
Print ( __FUNCTION__ , " Order sent in sync mode" );
return ( true );
}
else
{
Print ( __FUNCTION__ , " Error order sent in sync mode! Retcode = " ,result.retcode);
}
}
else
{
Print ( __FUNCTION__ , " Error order sent in sync mode! Retcode = " ,result.retcode);
}
}
else
{
Print ( __FUNCTION__ , " Order not sent in sync mode." );
}
return ( false );
}
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch (trans.type)
{
case TRADE_TRANSACTION_HISTORY_ADD :
if ((order_ticket > 0 ) && (trans.order == order_ticket))
{
//Вот здесь и смотрим что произошло
}
break ;
}
}
Ek olarak, bir pozisyonun açılışını seçmeye çalışarak kontrol edebilirsiniz. Ve birkaç tane denemek daha iyidir
do
{
n++;
}
while (! PositionSelectByTicket (tradeResult.deal) && n < 5 );
Ayrıca, kötü olan OrderCheck(Request, checkResult) kontrolünün olmadığını da fark ettim.
Ya zaten bir pozisyon varsa?
Yoksa zaten bir pozisyon var ama sipariş tam olarak doldurulmadı mı?
Ek olarak, bir pozisyonun açılışını seçmeye çalışarak kontrol edebilirsiniz. Ve birkaç tane denemek daha iyidir
do
{
n++;
}
while (! PositionSelectByTicket (tradeResult.deal) && n < 5 );
Ayrıca, kötü olan OrderCheck(Request, checkResult) kontrolünün olmadığını da fark ettim.
Bu oldukça mümkün ve OrderCheck'i ekleyeceğim (Request, checkResult)
teşekkürler
ama bu döngüyü pek sevmiyorum.
Evet ve ayrıca bir piyasa emrinde - fiyat = 0
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID ); unut gitsin
{
MqlTradeRequest request={ 0 };
MqlTradeResult result={ 0 };
order_ticket= 0 ;
request.action = TRADE_ACTION_DEAL ;
request.magic = 9876543211 ;
request.symbol = Symbol ();
request.volume = 1 ;
request.price = 0 ;
request.type= ORDER_TYPE_BUY ;
request.comment= "Sync mode" ;
request.type_filling=ORDER_FILLING_FOK;
request.type_time= ORDER_TIME_DAY ;
if ( OrderSend (request,result))
{
if ((result.retcode== TRADE_RETCODE_DONE ) || (result.retcode== TRADE_RETCODE_PLACED ))
{
if (result.order> 0 )
{
order_ticket=result.order;
Print ( __FUNCTION__ , " Order sent in sync mode" );
return ( true );
}
else
{
Print ( __FUNCTION__ , " Error order sent in sync mode! Retcode = " ,result.retcode);
}
}
else
{
Print ( __FUNCTION__ , " Error order sent in sync mode! Retcode = " ,result.retcode);
}
}
else
{
Print ( __FUNCTION__ , " Order not sent in sync mode." );
}
return ( false );
}
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch (trans.type)
{
case TRADE_TRANSACTION_HISTORY_ADD :
if ((order_ticket > 0 ) && (trans.order == order_ticket))
{
//Вот здесь и смотрим что произошло
}
break ;
}
}
ama fiyat hakkında .... evet, MT4'e daha çok alışkınım ve orada her zaman fiyatı belirlemeniz gerekiyor ...
tekrarlıyorum
Ayrıca , siparişin durumunu ve tarihte görünüp görünmediğini de kontrol etmeniz gerekir.
Borsa pozisyonlarla çalışmaz, sadece emirlerle çalışır.
Gecikmeler koyarsam haklısınız ama ben piyasada çalışıyorum ve burada da Sonuçlar.deal kullanılarak bilet alınıyor .
Gülüşün ne anlama geliyor anlamadım?
Bunu senden duymayı beklemiyordum. Ne duraklıyor, yoksa şaka mı yapıyorsun?
Kötü kalıtım Forex.
...
Ya zaten bir pozisyon varsa?
Yoksa zaten bir pozisyon var ama sipariş tam olarak doldurulmadı mı?