FMIC : Bazı tavsiyeler; "Sor" veya "Teklif" kullanmayın - bunun yerine "OrderClosePrice()" kullanın. Al veya Sat emri olmasına bakılmaksızın gerçek zamanlı bir değerdir.
Gerçek zamanlı değil.
Ask ve Bid ile gecikmelerden sonra, yani birden çok sunucu çağrısı arasında, Uyku veya uzun bir hesaplamadan sonra RefreshRates() yapmanız gerekir.
OrderClosePrice ile yalnızca OrderSelect ile güncellenir . Bu nedenle, Uyku veya uzun bir hesaplamadan sonra (veya OnTick çağrıları arasında bir sırayı seçtikten sonra), yeniden seçim yapmanız gerekir.
Ask ve Bid ile gecikmelerden sonra, yani birden çok sunucu çağrısı arasında, Uyku veya uzun bir hesaplamadan sonra RefreshRates() yapmanız gerekir.
OrderClosePrice ile yalnızca OrderSelect ile güncellenir . Bu nedenle, Uyku veya uzun bir hesaplamadan sonra (veya OnTick aramaları arasında bir sırayı seçtikten sonra), yeniden seçim yapmanız gerekir.
Bilgi için teşekkürler. "OrderClosePrice()" öğesinin arabelleğe alındığını bilmiyordum. Bu yüzden ne "OrderClosePrice()" ne de "Sor"/"Teklif" ideal gerçek zamanlı çözüm değildir.
Ancak, "OrderSelect()" yapıldıktan sonra "OrderClosePrice()" öğesinin "Sor"/"Teklif" kullanımından daha iyi bir genel çözüm olduğunu kabul ediyor musunuz?
Ve Gerçek Zamanlı bir çözüm için, eğer gerçekten gerekliyse, sanırım alternatiflere geri dönebiliriz:
"OrderSelect()" ile Siparişi Yeniden Seçmek (EDIT: bunu siz belirtmiş olsanız bile ilk gönderide bunu listelemeyi unuttum)
"Sor"/"Teklif" ile "RefreshRate()"
"MODE_ASK"/"MODE_BID" ile "MarketInfo()" (eski MQL4 Stili)
"SYMBOL_ASK"/"SYMBOL_BID" ile "SymbolInfoDouble()" (yeni stil MQL4+ ve MQL5)
"SymbolInfoTick()" (ki zaten EA'larımın çoğunda zaten kullanıyorum)
FMIC :Ancak, "OrderClosePrice()" öğesinin "OrderSelect()" yapıldıktan sonra "Sor"/"Teklif" kullanımından daha iyi bir genel çözüm olduğunu kabul ediyor musunuz?
Şimdiye kadarki herkesin yardımları için teşekkür ederim. Sanırım şimdi 130 numaralı hatayı çözdüm, ancak OrderSelect işlevimde ciddi bir sorun var, bu yüzden büyük olasılıkla yalnızca bazı siparişleri bazen değiştiriyor. Aşağıda yazdırdığım şeylerin bir listesi var. OrderTicket # tamamen yanlış. Bu bilet numarası EURAUD için açtığım bir işleme ait. Tüm sonuçları dahil etmemiş olsam da, aslında OrderTicket numaralarının ticaret terminalindeki çifte karşılık gelmediği birden fazla Çift var.
Birisi lütfen bir göz atıp OrderSelect ile ilgili sorunun ne olduğunu bana bildirebilir mi? Teşekkür ederim
2016.04.18 16:04:38.602Trailing_v19 EURUSD,M15: bilet = 0 Biletin OrdersTotal ile aynı değeri yazdırması gerektiğini düşünüyorum, bu yüzden sayacım çalışmıyor gibi görünüyor.
Herkese selam. Tüm yardımlar için teşekkürler. Hatayı buldum ve sorunlar çözüldü. Stoploss kullanmadığım için, OrderStopLoss()'un değeri her zaman 0'dır. Bu, satın alma emrini değiştirirken bir sorun değildir, çünkü 0 her zaman Bid-TrailingStop*Pip'ten küçüktür. Ancak satış emri ile 0 asla Ask+Trailingstop*Pip'den fazla olamaz. Bu yüzden bu satıra or(|| OrderStopLoss()) eklemek zorunda kaldım:
if (OrderType()==OP_SELL){
if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET)){
if ((OrderOpenPrice()-Ask)>(TrailingStart*Pip)){
if (OrderStopLoss()>Ask+(TrailingStop*Pip) || OrderStopLoss()== 0 ) { //Added OrderStopLoss()==0if (OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(TrailingStop*Pip),OrderTakeProfit(),Red))
Yardımın için çok teşekkür ederim. Evet, OrderSelect'te kesinlikle bir sorun var çünkü sadece bazı grafiklerde çalışıyor. Diğer sorun ise, işlemler manuel olarak yapıldığından MagicNumber ekleyemem. Kodun alakalı olduğunu düşündüğüm kısmını kullandım, ancak derlemesini sağlayamıyorum. Bu hatayı gösterir:
'MySelect' - işlev yalnızca genel kapsamda bildirilebilirİzleyen_v26.mq43113
ve 31. satır şudur:
bool MySelect( int iWhat, int eSelect, int ePool=MODE_TRADES){
İşte tüm EA:
#property strict ;
externint TrailingStart= 10 ;
externint TrailingStop= 5 ;
double stoplevel=(MarketInfo( Symbol (),MODE_STOPLEVEL))/ 10 ;
int TS=TrailingStart-TrailingStop;
bool MySelect( int iWhat, int eSelect, int ePool=MODE_TRADES);
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int init(){
if (TS<stoplevel){
MessageBox ( "Please note: Your inputs for TrailingStart and/or TrailingStop cannot" +
"\nbe less than the minimum levels required by your broker and the" +
"\nTrailingStart has been increased automatically to " + StringConcatenate (stoplevel+TrailingStop)+ " pips" );
}
return ( 0 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int deinit(){
return ( 0 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start(){
double Pip= Point * 10 ;
if (TS<stoplevel) TrailingStart=( int )stoplevel+TrailingStop;
bool MySelect( int iWhat, int eSelect, int ePool=MODE_TRADES){
if (! OrderSelect (iWhat, eSelect, ePool)) return ( false );
if (OrderSymbol() != _Symbol ) return ( false );
if (ePool != MODE_HISTORY) return ( true );
return (OrderType() <= OP_SELL);
}
for ( int i = OrdersTotal ()- 1 ; i >= 0 ; i--)
if (MySelect(i, SELECT_BY_POS)){
for ( int iPos=OrdersHistoryTotal()- 1 ; iPos >= 0 ; iPos--)
if (MySelect(iPos, SELECT_BY_POS, MODE_HISTORY)){
int nextTkt = OrderTicket();
if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET)){
if ((Bid-OrderOpenPrice())>(TrailingStart*Pip)){
if (OrderStopLoss()<Bid-(TrailingStop*Pip)){
if (OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(TrailingStop*Pip),OrderTakeProfit(),Blue))
Print ( "Buy = " , GetLastError ());
return ( 0 );
RefreshRates();
}
}
}
}
if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET)){
if ((OrderOpenPrice()-Ask)>(TrailingStart*Pip)){
if (OrderStopLoss()>Ask+(TrailingStop*Pip) || OrderStopLoss()== 0 ){
if (OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(TrailingStop*Pip),OrderTakeProfit(),Red))
Print ( "Sell = " , GetLastError ());
return ( 0 );
RefreshRates();
}
}
}
}
return ( 0 );
}
//+------------------------------------------------------------------+
Evet, OrderSelect'te kesinlikle bir sorun var çünkü sadece bazı grafiklerde çalışıyor. Diğer sorun ise, işlemler manuel olarak yapıldığından MagicNumber ekleyemem. Kodun alakalı olduğunu düşündüğüm kısmını kullandım, ancak derlemesini sağlayamıyorum.
Sana, üzerine inşa edebileceğin, problemlerini çözen ve hatta ondan önce onları listeleyen mükemmel bir iskelet kodu verdim, ama sen onu görmezden gelmeyi seçiyorsun ve kodunun neden istediğini yapmadığını merak etmeye devam ediyorsun!
Niye ya? Kodunuzun çalışmamasını mı istiyorsunuz? Örneği kullanın ve kendiniz test edin!
Gerçek zamanlı değil.
Bilgi için teşekkürler. "OrderClosePrice()" öğesinin arabelleğe alındığını bilmiyordum. Bu yüzden ne "OrderClosePrice()" ne de "Sor"/"Teklif" ideal gerçek zamanlı çözüm değildir.
Ancak, "OrderSelect()" yapıldıktan sonra "OrderClosePrice()" öğesinin "Sor"/"Teklif" kullanımından daha iyi bir genel çözüm olduğunu kabul ediyor musunuz?
Ve Gerçek Zamanlı bir çözüm için, eğer gerçekten gerekliyse, sanırım alternatiflere geri dönebiliriz:
Neden tekerleği yeniden icat etmeye çalışıyorsun?
Buraya bakın - ihtiyacınız olan her şeyi bulacaksınız.
Kaynak kodunu değiştirmeye başlamazsa.
Şimdiye kadarki herkesin yardımları için teşekkür ederim. Sanırım şimdi 130 numaralı hatayı çözdüm, ancak OrderSelect işlevimde ciddi bir sorun var, bu yüzden büyük olasılıkla yalnızca bazı siparişleri bazen değiştiriyor. Aşağıda yazdırdığım şeylerin bir listesi var. OrderTicket # tamamen yanlış. Bu bilet numarası EURAUD için açtığım bir işleme ait. Tüm sonuçları dahil etmemiş olsam da, aslında OrderTicket numaralarının ticaret terminalindeki çifte karşılık gelmediği birden fazla Çift var.
Birisi lütfen bir göz atıp OrderSelect ile ilgili sorunun ne olduğunu bana bildirebilir mi? Teşekkür ederim
2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: bilet = 0 Biletin OrdersTotal ile aynı değeri yazdırması gerektiğini düşünüyorum, bu yüzden sayacım çalışmıyor gibi görünüyor.
2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: OrderSelect = true
2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: Sipariş Toplamı = 11
2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: Selectbypos = 0
2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: Selectbyticket = 1
2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: OrderTicket = 50213357
Herkese selam. Tüm yardımlar için teşekkürler. Hatayı buldum ve sorunlar çözüldü. Stoploss kullanmadığım için, OrderStopLoss()'un değeri her zaman 0'dır. Bu, satın alma emrini değiştirirken bir sorun değildir, çünkü 0 her zaman Bid-TrailingStop*Pip'ten küçüktür. Ancak satış emri ile 0 asla Ask+Trailingstop*Pip'den fazla olamaz. Bu yüzden bu satıra or(|| OrderStopLoss()) eklemek zorunda kaldım:
Yardımın için çok teşekkür ederim. Evet, OrderSelect'te kesinlikle bir sorun var çünkü sadece bazı grafiklerde çalışıyor. Diğer sorun ise, işlemler manuel olarak yapıldığından MagicNumber ekleyemem. Kodun alakalı olduğunu düşündüğüm kısmını kullandım, ancak derlemesini sağlayamıyorum. Bu hatayı gösterir:
'MySelect' - işlev yalnızca genel kapsamda bildirilebilir İzleyen_v26.mq4 31 13
ve 31. satır şudur:
İşte tüm EA:
Evet, OrderSelect'te kesinlikle bir sorun var çünkü sadece bazı grafiklerde çalışıyor. Diğer sorun ise, işlemler manuel olarak yapıldığından MagicNumber ekleyemem. Kodun alakalı olduğunu düşündüğüm kısmını kullandım, ancak derlemesini sağlayamıyorum.
Sana, üzerine inşa edebileceğin, problemlerini çözen ve hatta ondan önce onları listeleyen mükemmel bir iskelet kodu verdim, ama sen onu görmezden gelmeyi seçiyorsun ve kodunun neden istediğini yapmadığını merak etmeye devam ediyorsun!
Niye ya? Kodunuzun çalışmamasını mı istiyorsunuz? Örneği kullanın ve kendiniz test edin!