Bu yaklaşım sadece mevcut pozisyon büyüklüğü sıfırsa ve yeni ticaret istenen pozisyon büyüklüğü ile başarılı bir şekilde yürütülürse işe yarar.
Kodu görün:
#include <Trade\Trade.mqh>
//--- global variables
CTrade trade;
bool position_opened= false ;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnTick ()
{
bool conditions_to_open;
ENUM_ORDER_TYPE order_type;
double lot;
double price,sl,tp;
//---...set variables//--- inside OnTick()if (conditions_to_open && !position_opened) //-- Or position_opened==false
{
if (trade.PositionOpen( _Symbol ,order_type,lot,price,sl,tp, "comment" )
&&
(trade.ResultRetcode()== 10009 || trade.ResultRetcode()== 10008 )) //-- Or others condition according to your needs
{
//--- set the global variable to true to avoid duplicate orders
position_opened= true ;
Print ( "Success!" );
}
else
{
Print ( "Error = " , GetLastError (), "trade error = " , trade.ResultRetcode());
//--- Sets the global variable to false// position_opened=false; //-- Not needed as position_opened is already falsereturn ;
}
}
//---
}
Peki ya EA'nız pozisyonu tersine çeviriyorsa: UZUN pozisyondan KISA pozisyona veya tam tersi ve bu işlem 2 farklı işlemde gerçekleştirilirse?
İlk işlemden sonra "position_opened" boole değeri "TRUE" olarak ayarlanır ve koşul " if (conditions_to_open && !position_opened)" öğesini kontrol ettiğinden EA 2e ticaretini açamaz, bu nedenle ikinci ticaret engellenecektir.
Peki ya pozisyon boyutu sadece kısmen açılırsa? Konum boyutunuzu doğru boyuta getirmek için ikinci bir ticarete ihtiyacınız var.
Sonunda, "uzun lafın kısası" yapmak için, GEÇERLİ konum boyutunu hesaplamak için her zaman PositionSelect(Symbol()) işlevine ihtiyacınız vardır ve bu, sorunun başladığı yer (ve bu forum başlığı).
Kritik anda, EA PositionSelect(Symbol())'u çağırdığında, terminal henüz CURRENT pozisyon boyutunu güncellememiş ve EA yanlış pozisyon boyutu ile çalışıyor ve ticaret sunucusuna yeni bir çift emir gönderiyor.
EA, PositionSelect(Symbol()) işlevini doğru konum boyutuna güncelleyene kadar beklemek zorunda olduğunuz için ( figurelli ) yaklaşımının daha iyi olduğunu düşünüyorum.
bool fatalError= false ; // atention: declare this as global
....
if (fatalError == false )
{
if (m_Trade.PositionOpen( Symbol (), ORDER_TYPE_BUY , LotSize, Price, 0 , 0 ))
{
Print ( "Position opened in " , Symbol ());
int maxTimeout= 0 ;
while (! PositionSelect ( Symbol ()))
{
Sleep ( 100 );
maxTimeout++;
if (maxTimeout > 100 )
{
Print ( "### PositionSelect fatal error!" );
fatalError = true ;
break ;
}
}
Print ( "--> PositionSelect delay=" ,maxTimeout * 100 );
break ;
}
}
Bu yaklaşım sadece mevcut pozisyon büyüklüğü sıfırsa ve yeni ticaret istenen pozisyon büyüklüğü ile başarılı bir şekilde yürütülürse işe yarar.
Kodu görün:
Peki ya EA'nız pozisyonu tersine çeviriyorsa: UZUN pozisyondan KISA pozisyona veya tam tersi ve bu işlem 2 farklı işlemde gerçekleştirilirse?
İlk işlemden sonra "position_opened" boole değeri "TRUE" olarak ayarlanır ve koşul " if (conditions_to_open && !position_opened)" öğesini kontrol ettiğinden EA 2e ticaretini açamaz, bu nedenle ikinci ticaret engellenecektir.
Peki ya pozisyon boyutu sadece kısmen açılırsa? Konum boyutunuzu doğru boyuta getirmek için ikinci bir ticarete ihtiyacınız var.
Sonunda, "uzun lafın kısası" yapmak için, GEÇERLİ konum boyutunu hesaplamak için her zaman PositionSelect(Symbol()) işlevine ihtiyacınız vardır ve bu, sorunun başladığı yer (ve bu forum başlığı).
Kritik anda, EA PositionSelect(Symbol())'u çağırdığında, terminal henüz CURRENT pozisyon boyutunu güncellememiş ve EA yanlış pozisyon boyutu ile çalışıyor ve ticaret sunucusuna yeni bir çift emir gönderiyor.
EA PositionSelect(Symbol()) işlevini güncelleyene kadar beklemek zorunda olduğunuz için ( figurelli ) yaklaşımının daha iyi olduğunu düşünüyorum.
Haklısın, her iki yaklaşımın da sınırlamaları var.
Bu sorunun kaynağı artık net bir şekilde tespit edilmiştir. Her biri kendi stratejisine bağlı olarak kodunu uyarlamak zorundadır. Her duruma uygulanabilecek genel bir yöntem olduğunu düşünmüyorum.
Haklısın, her iki yaklaşımın da sınırlamaları var.
Bu sorunun kaynağı artık net bir şekilde tespit edilmiştir. Her biri kendi stratejisine bağlı olarak kodunu uyarlamak zorundadır. Her duruma uygulanabilecek genel bir yöntem olduğunu düşünmüyorum.
Veya Metaquotes adamlarının kendisinden "resmi bir açıklama" beklemek zorundayız.
angevoyageur : bir faydası olacağını düşünmüyorum. Böyle bir karmaşıklığa yol açan açıkça kötü bir tasarım olmasına rağmen .
Seninle aynı fikirde olsaydım, bunun yararsız olduğunu düşünür müydün? .
Az önce Alım Satım Sonlanıncaya Kadar Uyuma çözümünün bana OrderSendReliable()'ı hatırlattığını öğrettim. Bunların daha zarif bir şekilde ele alınacağını öğrettim.
Ayrıca bana old_documents ... nereye gittiğini hatırlatıyor { ve tüm işlemler durdurulmalı}.
Veya Metaquotes adamlarının kendisinden "resmi bir açıklama" beklemek zorundayız.
Hizmet masasından zaten bir yanıt var mı?
Hayır. Ben sadece bunu düşünüyordum... İlgili tüm kişilerin bu konu hakkında ServiceDesk'e bir bilet yazması muhtemelen faydalı olacaktır. Ancak MQ'nun bu tasarımı değiştirmeye istekli olup olmadığı konusunda çok şüpheliyim. Ama deneyebiliriz.
İnsanlar ServiceDesk'e yazabilir ve bileti# burada bildirebilir. Benimki
Seninle aynı fikirde olsaydım, yararsız olup olmadığını düşünür müydün? .
Az önce Alım Satım Sonlanıncaya Kadar Uyuma çözümünün bana OrderSendReliable()'ı hatırlattığını öğrettim. Bunların daha zarif bir şekilde ele alınacağını öğrettim.
Ayrıca bana old_documents ... nereye gittiğini hatırlatıyor { ve tüm işlemler durdurulmalı}.
Her neyse, özür dilemek mql5'i seçmek değildi.
Acaba benzer bir sorun mql4'te de olamaz mı diye merak ediyorum, son aylarda mql4 forumunda çifte alım satımlardan şikayet eden kullanıcılardan en az 2 konu okudum. İlgili olduğundan emin değilim, ancak bu konuları kontrol etmeye değer olabilir. Bunları da okuyor musunuz?
angevoyageur : Acaba benzer bir sorun mql4'te de olamaz mı diye merak ediyorum, son aylarda mql4 forumunda çifte alım satımlardan şikayet eden kullanıcılardan en az 2 konu okudum. İlgili olduğundan emin değilim, ancak bu konuları kontrol etmeye değer olabilir. Bunları da okuyor musunuz?
Evet, ancak bunun kötü kodlamadan kaynaklanıp kaynaklanmadığını söylemek zor. Çifte ticaret, çoklu ticaret dizisinden önce bile bir sorundu. Geleneksel olarak işlenme şekli, snelle_moda'nın işleme şeklidir.
Evet, ancak bunun kötü kodlamadan kaynaklanıp kaynaklanmadığını söylemek zor. Çifte ticaret, çoklu ticaret dizisinden önce bile bir sorundu. Geleneksel olarak işlenme şekli, snelle_moda'nın işleme şeklidir.
Ne demek istediğini anladığımdan emin değilim. Bu başlıkta bahsettiğimiz bu sorun, kötü bir kodlamadan değil, mql5'teki kötü bir tasarımdan kaynaklanıyor (bu benim görüşüm, ya da belki de sadece bir hata mı?). "Birden fazla ticaret dizisi" ile ne demek istiyorsunuz?
Merhaba
Bu yaklaşım sadece mevcut pozisyon büyüklüğü sıfırsa ve yeni ticaret istenen pozisyon büyüklüğü ile başarılı bir şekilde yürütülürse işe yarar.
Kodu görün:
Peki ya EA'nız pozisyonu tersine çeviriyorsa: UZUN pozisyondan KISA pozisyona veya tam tersi ve bu işlem 2 farklı işlemde gerçekleştirilirse?
İlk işlemden sonra "position_opened" boole değeri "TRUE" olarak ayarlanır ve koşul " if (conditions_to_open && !position_opened)" öğesini kontrol ettiğinden EA 2e ticaretini açamaz, bu nedenle ikinci ticaret engellenecektir.
Peki ya pozisyon boyutu sadece kısmen açılırsa? Konum boyutunuzu doğru boyuta getirmek için ikinci bir ticarete ihtiyacınız var.
Sonunda, "uzun lafın kısası" yapmak için, GEÇERLİ konum boyutunu hesaplamak için her zaman PositionSelect(Symbol()) işlevine ihtiyacınız vardır ve bu, sorunun başladığı yer (ve bu forum başlığı).
Kritik anda, EA PositionSelect(Symbol())'u çağırdığında, terminal henüz CURRENT pozisyon boyutunu güncellememiş ve EA yanlış pozisyon boyutu ile çalışıyor ve ticaret sunucusuna yeni bir çift emir gönderiyor.
EA, PositionSelect(Symbol()) işlevini doğru konum boyutuna güncelleyene kadar beklemek zorunda olduğunuz için ( figurelli ) yaklaşımının daha iyi olduğunu düşünüyorum.
Merhaba
Bu yaklaşım sadece mevcut pozisyon büyüklüğü sıfırsa ve yeni ticaret istenen pozisyon büyüklüğü ile başarılı bir şekilde yürütülürse işe yarar.
Kodu görün:
Peki ya EA'nız pozisyonu tersine çeviriyorsa: UZUN pozisyondan KISA pozisyona veya tam tersi ve bu işlem 2 farklı işlemde gerçekleştirilirse?
İlk işlemden sonra "position_opened" boole değeri "TRUE" olarak ayarlanır ve koşul " if (conditions_to_open && !position_opened)" öğesini kontrol ettiğinden EA 2e ticaretini açamaz, bu nedenle ikinci ticaret engellenecektir.
Peki ya pozisyon boyutu sadece kısmen açılırsa? Konum boyutunuzu doğru boyuta getirmek için ikinci bir ticarete ihtiyacınız var.
Sonunda, "uzun lafın kısası" yapmak için, GEÇERLİ konum boyutunu hesaplamak için her zaman PositionSelect(Symbol()) işlevine ihtiyacınız vardır ve bu, sorunun başladığı yer (ve bu forum başlığı).
Kritik anda, EA PositionSelect(Symbol())'u çağırdığında, terminal henüz CURRENT pozisyon boyutunu güncellememiş ve EA yanlış pozisyon boyutu ile çalışıyor ve ticaret sunucusuna yeni bir çift emir gönderiyor.
EA PositionSelect(Symbol()) işlevini güncelleyene kadar beklemek zorunda olduğunuz için ( figurelli ) yaklaşımının daha iyi olduğunu düşünüyorum.
Haklısın, her iki yaklaşımın da sınırlamaları var.
Bu sorunun kaynağı artık net bir şekilde tespit edilmiştir. Her biri kendi stratejisine bağlı olarak kodunu uyarlamak zorundadır. Her duruma uygulanabilecek genel bir yöntem olduğunu düşünmüyorum.
Great & Powerful mql5 için bir OrderSendReliable () Kitaplığına ihtiyacımız var mı?
Haklısın, her iki yaklaşımın da sınırlamaları var.
Bu sorunun kaynağı artık net bir şekilde tespit edilmiştir. Her biri kendi stratejisine bağlı olarak kodunu uyarlamak zorundadır. Her duruma uygulanabilecek genel bir yöntem olduğunu düşünmüyorum.
Veya Metaquotes adamlarının kendisinden "resmi bir açıklama" beklemek zorundayız.
Hizmet masasından zaten bir yanıt var mı?
Seninle aynı fikirde olsaydım, bunun yararsız olduğunu düşünür müydün?
.
Az önce Alım Satım Sonlanıncaya Kadar Uyuma çözümünün bana OrderSendReliable()'ı hatırlattığını öğrettim. Bunların daha zarif bir şekilde ele alınacağını öğrettim.
Ayrıca bana old_documents ... nereye gittiğini hatırlatıyor { ve tüm işlemler durdurulmalı}.
Her neyse, özür dilemek mql5'i seçmek değildi.
Veya Metaquotes adamlarının kendisinden "resmi bir açıklama" beklemek zorundayız.
Hizmet masasından zaten bir yanıt var mı?
Hayır. Ben sadece bunu düşünüyordum... İlgili tüm kişilerin bu konu hakkında ServiceDesk'e bir bilet yazması muhtemelen faydalı olacaktır. Ancak MQ'nun bu tasarımı değiştirmeye istekli olup olmadığı konusunda çok şüpheliyim. Ama deneyebiliriz.
İnsanlar ServiceDesk'e yazabilir ve bileti# burada bildirebilir. Benimki
Seninle aynı fikirde olsaydım, yararsız olup olmadığını düşünür müydün? .
Az önce Alım Satım Sonlanıncaya Kadar Uyuma çözümünün bana OrderSendReliable()'ı hatırlattığını öğrettim. Bunların daha zarif bir şekilde ele alınacağını öğrettim.
Ayrıca bana old_documents ... nereye gittiğini hatırlatıyor { ve tüm işlemler durdurulmalı}.
Her neyse, özür dilemek mql5'i seçmek değildi.
Evet, ancak bunun kötü kodlamadan kaynaklanıp kaynaklanmadığını söylemek zor. Çifte ticaret, çoklu ticaret dizisinden önce bile bir sorundu. Geleneksel olarak işlenme şekli, snelle_moda'nın işleme şeklidir.
Evet, ancak bunun kötü kodlamadan kaynaklanıp kaynaklanmadığını söylemek zor. Çifte ticaret, çoklu ticaret dizisinden önce bile bir sorundu. Geleneksel olarak işlenme şekli, snelle_moda'nın işleme şeklidir.