Günaydın, biri bana yardımcı olabilir mi lütfen? Anladığım kadarıyla makalede belirtilen her şeyi yaptım. Ancak, yazarın zaten satın alma varsa satın alma veya zaten satma varsa satma yapmamasını istediğini anladığımın ötesinde, aynı anda iki açık işlem yapmayı başaramıyorum. Örneğin stratejim, açık bir satın alma emrim olduğunda bir satış sinyali gönderiyor ve bir satış açmak yerine, kod tp / sl'ye dokunamadan satın alma işlemini kapatıyor. Ve böylece elimde ne alım ne de satım kalıyor. Satış, satın almayı kapatır ve satın alma, satışı kapatır. Stratejimde yalnızca bir çift, yalnızca bir zaman dilimi ve yalnızca bir lot boyutu kullanıyorum. Stratejiyi tetiklerse aynı anda nasıl alış ve satış yapabileceğimi söyleyebilir misiniz? Yani, siparişlerin SADECE tp / sl tarafından kapatılması. Şimdiden çok teşekkür ederim.
Kılavuzun sonundaki bu dosya ile"Strateji Test Cihazı" içindeyim ve aşağıdaki hatayı gösteriyor:
*Hata bu makalede daha önce tartışılmıştı, ancak yazılı bir çözüm benim için işe yaramadı ve yardımınıza ihtiyacım var.
OF 012:44:39.040 EA_ADX (XAUUSD,H1) 2020.01.0319:00:00Alert: The Buy order request could not be completed -error:4756
ED 212:44:39.043 Trades 2020.01.0320:00:00 failed market buy 0.1 XAUUSD sl: 1549.09 tp: 1549.16 [Invalid stops]
JP 012:44:39.043 EA_ADX (XAUUSD,H1) 2020.01.0320:00:00Alert: The Buy order request could not be completed -error:4756
ER 212:44:39.049 Trades 2020.01.0321:00:00 failed market buy 0.1 XAUUSD sl: 1549.90 tp: 1549.97 [Invalid stops]
MR 012:44:39.049 EA_ADX (XAUUSD,H1) 2020.01.0321:00:00Alert: The Buy order request could not be completed -error:4756
PP 212:44:39.053 Trades 2020.01.0322:00:00 failed market buy 0.1 XAUUSD sl: 1548.16 tp: 1548.23 [Invalid stops]
//--- Halihazırda açılmış pozisyonlarımız var mı?bool Buy_opened= false ; // Buy açılan pozisyonun sonucunu tutmak için değişkenbool Sell_opened= false ; // Satılan açık pozisyonun sonucunu tutan değişkenif ( PositionSelect ( _Symbol ) == true ) // açılmış bir pozisyonumuz var
{
if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_BUY )
{
Buy_opened = true ; //Bu bir Alış
}
elseif ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_SELL )
{
Sell_opened = true ; // Bu bir Satış
}
}
PositionSelect _Symbol için ilk pozisyonu seçtiğinden, EA bir alış pozisyonu açarsa, alış pozisyonu açıkken Sell_opened değişkeni her zaman false olur ve bir satış sinyali olduğunda birden fazla satış pozisyonunun gerçekleşmesine neden olur.
Bunu düzeltmek ve aynı anda açık alım ve satım pozisyonları olup olmadığını anlamak için aşağıdaki mantık kullanılabilir:
//--- Halihazırda açılmış pozisyonlarımız var mı?bool Buy_opened = false ; // Buy açılan pozisyonun sonucunu tutmak için değişkenbool Sell_opened = false ; // Satılan açık pozisyonun sonucunu tutmak için değişkenlerif ( PositionSelect ( _Symbol ) == true ) // açılmış bir pozisyonumuz var
{
for ( int i= 0 ;i< PositionsTotal ();i++){
PositionSelectByTicket ( PositionGetTicket (i));
if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_SELL )
{
Sell_opened = true ; // Bu bir Satış
} elseif ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_BUY )
{
Buy_opened = true ; //Bu bir Alış
}
}
Kılavuzun sonundaki bu dosya ile"Strateji Test Cihazındayım" ve aşağıdaki hatayı gösteriyor:
*Hata bu makalede daha önce tartışıldı, ancak yazılı bir çözüm benim için işe yaramadı ve yardımınıza ihtiyacım var.
Dosya Kılavuzun sonunda yer almaktadır.
Bu sorunu nasıl çözebilirim?
Talep ettiğiniz satış fiyatını kontrol edin, bunu yapmak için mrequest.price, mrequest.sl ve mrequest.tp değişkenlerinde hata ayıklamak için kesme noktası kullanın.
Değiştirmeyi deneyin
mrequest.type_filling = ORDER_FILLING_FOK; // Sipariş gerçekleştirme türü
için:
mrequest.type_filling = ORDER_FILLING_IOC; // Sipariş gerçekleştirme türü
Bazı kağıtların minimum zararı durdurma kuralları vardır, daha fazlasını buradan okuyun: https://www.mql5.com/pt/forum/319474
Makale için çok teşekkür ederim Samuel, sen bir çatlaksın!
Brokerim ile çalışmasını sağlamak biraz zor oldu çünkü makale "net" modunda ve "hedging" moduna koymak için bilgi aramak zorunda kaldım. Karşılaştığım ilk sorun mrequest.type_filling ile ilgiliydi.
XM brokeri için işe yarayan şudur:
mrequest.type_filling = ORDER_FILLING_IOC; // Emrin gerçekleştirilme türü
MT5'inizin hangisine izin verdiğini bilmiyorsanız, tavsiyemTypeFilling() işlevinibir Print(TypeFilling()) veya bir Comment( TypeFilling ()) içinde kullanmanızdır; size 1 (ORDER_FILLING_FOK) veya 2 (ORDER_FILLING_IOC) olduğunu söylerse, hangisini koymanız gerektiğini bilirsiniz(https://www.mql5.com/docs/constants/tradingconstants/orderproperties#enum_order_type_filling) çünküORDER_FILLING_FOK (1) bu broker ile benim için çalışmıyor.
Bu düzeltildikten sonra, sorun PositionSelect'in çok fazla pozisyon açmasıdır. Samuel stratejisinde bunu söylemese de, amacın belirlenen kriterlerle (4 boolean adımı) tek bir alış veya satış pozisyonu (hangisi önce gelirse) açmak olduğunu ve bu pozisyon kapanana kadar başka bir tane açamayacağımızı anlıyorum.
Yaptığım şey bu kodu değiştirmek ...
//--- hata yok, bu yüzden devam ediyoruz.//--- Açık pozisyonlarımız var mı?bool Buy_opened=false; // açık pozisyonun sonucunu saklayan değişken Satın almabool Sell_opened=false; // açık pozisyon satışının sonucunu saklayan değişkenif (PositionSelect(_Symbol) ==true) // açık bir pozisyonumuz var
{
if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
{
Buy_opened = true; // It's a Purchase
}
elseif(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
{
Sell_opened = true; // It's a Sale
}
}
Bunun için...
//--- Hata almadığımız için devam ediyoruz.//--- Açık pozisyonlarımız var mı?bool Buy_opened = false; // Açık Alış pozisyonunun sonucunu saklayan değişkenbool Sell_opened = false; // Açık Satış pozisyonunun sonucunu saklayan değişken// Açık sipariş olup olmadığını görmek için tüm siparişleri gözden geçirelim.for(int i = 0; i < PositionsTotal(); i++)
{
ulong ticket = PositionGetTicket(i);
PositionSelectByTicket(ticket);
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
{
Buy_opened = true; // bir satın alma işlemidir
}
elseif(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
{
Sell_opened = true; // bir satış
}
}
// eğer açık bir pozisyon varsa, aktif işlem kapanana kadar bekleriz (SL veyaTP'ye dokunarak).if (Buy_opened || Sell_opened) return;
Not: Satır geldikten hemen sonra ...
//--- Önceki çubuğun kapanış fiyatını bar1 olan geçerli çubuğa kopyalayın.
p_close=mrate[1].close;
Bu şekilde benim için iyi çalıştı. Umarım faydalı bulursunuz.
Bu EA'yı mini endeksler veya mini dolarlar için kullanıp kullanamayacağımı bilen var mı?
Merhaba arkadaşlar, günaydın.
Kılavuzun sonundaki bu dosya ile"Strateji Test Cihazı" içindeyim ve aşağıdaki hatayı gösteriyor:
*Hata bu makalede daha önce tartışılmıştı, ancak yazılı bir çözüm benim için işe yaramadı ve yardımınıza ihtiyacım var.
Dosya Kılavuzun sonundadır.
Bu sorunu nasıl çözebilirim?
Önerilen her iki düzeltmeyi de yaptıktan sonra hala bu hatayı alıyorum:
ZeroMemory(mrequest);
ve ayrıca
if(Buy_opened || Sell_opened)
Lütfen birisi 4756 hatası konusunda yardımcı olabilir mi? Sadece bir Satın Alma Emri veremiyor gibi görünüyor.
SymbolInfoTick fonksiyonunu kullanıp kullanmadığınızı ve kodun bu kısmını yazıp yazmadığınızı kontrol edin:
PositionSelect _Symbol için ilk pozisyonu seçtiğinden, EA bir alış pozisyonu açarsa, alış pozisyonu açıkken Sell_opened değişkeni her zaman false olur ve bir satış sinyali olduğunda birden fazla satış pozisyonunun gerçekleşmesine neden olur.
Bunu düzeltmek ve aynı anda açık alım ve satım pozisyonları olup olmadığını anlamak için aşağıdaki mantık kullanılabilir:
Herkese merhaba, günaydın.
Kılavuzun sonundaki bu dosya ile"Strateji Test Cihazındayım" ve aşağıdaki hatayı gösteriyor:
*Hata bu makalede daha önce tartışıldı, ancak yazılı bir çözüm benim için işe yaramadı ve yardımınıza ihtiyacım var.
Dosya Kılavuzun sonunda yer almaktadır.
Bu sorunu nasıl çözebilirim?
Talep ettiğiniz satış fiyatını kontrol edin, bunu yapmak için mrequest.price, mrequest.sl ve mrequest.tp değişkenlerinde hata ayıklamak için kesme noktası kullanın.
Değiştirmeyi deneyin
için:
Bazı kağıtların minimum zararı durdurma kuralları vardır, daha fazlasını buradan okuyun: https://www.mql5.com/pt/forum/319474
Merhaba,
Makale için çok teşekkür ederim Samuel, sen bir çatlaksın!
Brokerim ile çalışmasını sağlamak biraz zor oldu çünkü makale "net" modunda ve "hedging" moduna koymak için bilgi aramak zorunda kaldım. Karşılaştığım ilk sorun mrequest.type_filling ile ilgiliydi.
XM brokeri için işe yarayan şudur:
MT5'inizin hangisine izin verdiğini bilmiyorsanız, tavsiyem TypeFilling( ) işlevinibir Print( TypeFilling()) veya bir Comment( TypeFilling ()) içinde kullanmanızdır; size 1 (ORDER_FILLING_FOK) veya 2 (ORDER_FILLING_IOC) olduğunu söylerse, hangisini koymanız gerektiğini bilirsiniz(https://www.mql5.com/docs/constants/tradingconstants/orderproperties#enum_order_type_filling) çünküORDER_FILLING_FOK (1) bu broker ile benim için çalışmıyor.
Bu düzeltildikten sonra, sorun PositionSelect'in çok fazla pozisyon açmasıdır. Samuel stratejisinde bunu söylemese de, amacın belirlenen kriterlerle (4 boolean adımı) tek bir alış veya satış pozisyonu (hangisi önce gelirse) açmak olduğunu ve bu pozisyon kapanana kadar başka bir tane açamayacağımızı anlıyorum.
Yaptığım şey bu kodu değiştirmek ...
Bunun için...
Not: Satır geldikten hemen sonra ...
Bu şekilde benim için iyi çalıştı. Umarım faydalı bulursunuz.
Saygılarımla.
Önerilen her iki düzeltmeyi de yaptıktan sonra hala bu hatayı alıyorum:
ZeroMemory(mrequest);
ve ayrıca
if(Buy_opened || Sell_opened)
Lütfen birisi 4756 hatası konusunda yardımcı olabilir mi? Sadece bir Satın Alma Emri veremiyor gibi görünüyor.
Brokerinizin Dolum Türü ORDER_FILLING_IOC olabilir, kodu şuradan düzenlemeyi deneyebilirsiniz:
mrequest.type_filling = ORDER_FILLING_FOK;Şuna:
mrequest.type_filling = ORDER_FILLING_IOC;Aynı sorunu ben de yaşadım ve şimdi başarıyla çözdüm