İşlem işleme OnTradeTransaction - sayfa 9

 
JRandomTrader :

Robotun algoritması açısından hayali bir pozisyona ihtiyaç vardır: eğer açtıysa, kapatması gerekir.

İlk gönderideki görevin daha da basit olduğunu ekleyeceğim - ızgaranın her düğümünün kendi SL / TP'si tarafından kapatıldığı bir limit emirleri ızgarasının çalışmasını uygulamak gerekliydi.

Örneğin, hesapta böyle tek yönlü bir Uzman Danışman vardır ve başka hiç kimse tarafından herhangi bir işlem yapılmaz. Ama burada bile hayali konumlardan bahsediyoruz.


Ve konu sadece ağları değil endişeleri de gündeme getirdi. Aynısı bir çit için de geçerli olabilir. Birkaç Uzman Danışmanla takas olur, ancak biri onu aldı ve CloseBy'de birkaç pozisyona çarptı. Uzman Danışmanlar hayali pozisyonlar üzerinden uygulanırsa böyle bir çöküş mantığa aykırı olmayacaktır.


Genel olarak, bu sanal bir ticaret ortamı aracılığıyla çözülür. Ve çözmek kolaydır. Algoritmik firmalar borsalarda TS portföylerini bu şekilde piyasaya sürüyor.

 
Alexey Viktorov :

Basitleştirmek için, muhtemelen evet. Kabul ediyorum.

Sonra "Ulaştırma departmanı başkanı" sorunu ve eylemlerini tam olarak dile getirmedi.

Durdurma emirleri ne anlama geliyor? Genel bir pozisyon için mi yoksa sadece bu özel danışmanın çalıştığı bölüm için mi???

Tabii ki, belirli bir danışmanın çalıştığı pozisyonun bir kısmı için. emirleri durdur - bekleyen sat/al stop ve sat/al limiti.

Şimdiye kadar, OnTradeTransactions'daki çok sayıda tuzak nedeniyle OnTrade'e gitmenin daha iyi olduğunu anladım.

 
Илья Ребенок :

Tabii ki, belirli bir danışmanın çalıştığı pozisyonun bir kısmı için. emirleri durdur - bekleyen sat/al stop ve sat/al limiti.

Şimdiye kadar, OnTradeTransactions'daki çok sayıda tuzak nedeniyle OnTrade'e gitmenin daha iyi olduğunu anladım.

Sadece birlikte çalıştıklarını unutmayın. Hangisi birinci hangisi ikinci hatırlamıyorum. Ancak OnTradeTransactions'da en azından ek kod içermeyen bazı bilgiler vardır ve OnTrade'de her şeyi zorla almanız gerekir. Öncelikle fonksiyonu hangi olayın tetiklediğini belirlemeniz gerekiyor...

 

Buraya böyle bir işlem yakalayıcı yazdım - neyin ve nereden olduğunu belirlemek faydalı olabilir (burada işlemin türüne bağlı olarak basit bir işlem olmasına rağmen) - siparişlerin ve işlemlerin geçmişine erişim yok (örneğin, bir uzmanın kimliğini yazdırın)

 //+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction &trans,
                         const MqlTradeRequest &request,
                         const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value 
   ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
   if (trans_type== TRADE_TRANSACTION_ORDER_ADD || trans_type== TRADE_TRANSACTION_ORDER_UPDATE || trans_type== TRADE_TRANSACTION_ORDER_DELETE ||
      trans_type== TRADE_TRANSACTION_HISTORY_ADD || trans_type== TRADE_TRANSACTION_HISTORY_UPDATE || trans_type== TRADE_TRANSACTION_HISTORY_DELETE )
     {
       Print ( "---" );
       Print ( EnumToString (trans_type));
       PrintFormat ( "%-15s: %d" , "order" ,trans.order);
       PrintFormat ( "%-15s: %s" , "symbol" ,trans.symbol);
       PrintFormat ( "%-15s: %s" , "order_type" , EnumToString (trans.order_type));
       PrintFormat ( "%-15s: %s" , "orders_state" , EnumToString (trans.order_state));
       PrintFormat ( "%-15s: %s" , "time_type" , EnumToString (trans.time_type));
       if (trans.time_type== ORDER_TIME_SPECIFIED || trans.time_type== ORDER_TIME_SPECIFIED_DAY )
        {
         PrintFormat ( "%-15s: %s" , "time_expiration" , TimeToString (trans.time_expiration, TIME_DATE | TIME_SECONDS ));
        }
       else
        {
         PrintFormat ( "%-15s: %s" , "time_expiration" , "---" );
        }
       PrintFormat ( "%-15s: %.8f" , "price" ,trans.price);
       if (trans.order_type== ORDER_TYPE_BUY_STOP_LIMIT || trans.order_type== ORDER_TYPE_SELL_STOP_LIMIT )
        {
         PrintFormat ( "%-15s: %.2f" , "price_trigger" ,trans.price_trigger);
        }
       else
        {
         PrintFormat ( "%-15s: %s" , "price_trigger" , "---" );
        }
       PrintFormat ( "%-15s: %.8f" , "price_sl" ,trans.price_sl);
       PrintFormat ( "%-15s: %.8f" , "price_tp" ,trans.price_tp);
       PrintFormat ( "%-15s: %.2f" , "volume" ,trans.volume);
       if (trans_type!= TRADE_TRANSACTION_ORDER_ADD && (trans.order_type== ORDER_TYPE_BUY || trans.order_type== ORDER_TYPE_SELL ))
        {
         PrintFormat ( "%-15s: %d" , "position" ,trans.position);
        }
       else
        {
         PrintFormat ( "%-15s: %s" , "position" , "---" );
        }
       if (trans.order_type== ORDER_TYPE_CLOSE_BY )
        {
         PrintFormat ( "%-15s: %d" , "position_by" ,trans.position_by);
        }
       else
        {
         PrintFormat ( "%-15s: %s" , "position_by" , "---" );
        }
     }
   else if (trans_type== TRADE_TRANSACTION_DEAL_ADD || trans_type== TRADE_TRANSACTION_DEAL_UPDATE || trans_type== TRADE_TRANSACTION_DEAL_DELETE )
     {
       Print ( "---" );
       Print ( EnumToString (trans_type));
       PrintFormat ( "%-15s: %d" , "deal" ,trans.deal);
       PrintFormat ( "%-15s: %d" , "order" ,trans.order);
       PrintFormat ( "%-15s: %s" , "symbol" ,trans.symbol);
       PrintFormat ( "%-15s: %s" , "deal_type" , EnumToString (trans.deal_type));
       PrintFormat ( "%-15s: %.8f" , "price" ,trans.price);
       PrintFormat ( "%-15s: %.8f" , "price_sl" ,trans.price_sl);
       PrintFormat ( "%-15s: %.8f" , "price_tp" ,trans.price_tp);
       PrintFormat ( "%-15s: %.2f" , "volume" ,trans.volume);
       PrintFormat ( "%-15s: %d" , "position" ,trans.position);
       if (trans.order_type== ORDER_TYPE_CLOSE_BY )
        {
         PrintFormat ( "%-15s: %d" , "position_by" ,trans.position_by);
        }
       else
        {
         PrintFormat ( "%-15s: %s" , "position_by" , "---" );
        }
     }
   else if (trans_type== TRADE_TRANSACTION_POSITION )
     {
       Print ( "---" );
       Print ( EnumToString (trans_type));
       PrintFormat ( "%-15s: %s" , "symbol" ,trans.symbol);
       PrintFormat ( "%-15s: %s" , "deal_type" , EnumToString (trans.deal_type));
       PrintFormat ( "%-15s: %.8f" , "price" ,trans.price);
       PrintFormat ( "%-15s: %.8f" , "price_sl" ,trans.price_sl);
       PrintFormat ( "%-15s: %.8f" , "price_tp" ,trans.price_tp);
       PrintFormat ( "%-15s: %.2f" , "volume" ,trans.volume);
       PrintFormat ( "%-15s: %d" , "position" ,trans.position);
     }
   else if (trans_type== TRADE_TRANSACTION_REQUEST )
     {
       Print ( "---" );
       Print ( EnumToString (trans_type));
     }
  }
 
Илья Ребенок :

fxsaber örnek için teşekkürler!

Sadece bu tam bir örnek değil, orijinal soruna tam bir çözüm.

 
Илья Ребенок :

Tabii ki, belirli bir danışmanın çalıştığı pozisyonun bir kısmı için. emirleri durdur - bekleyen sat/al stop ve sat/al limiti.

Şimdiye kadar, OnTradeTransactions'daki çok sayıda tuzak nedeniyle OnTrade'e gitmenin daha iyi olduğunu anladım.

Aynı ruhla devam :)

Küçük ipucu MqlTradeTransaction &trans - YALNIZCA alanlar alakalı

TRADE_TRANSACTION_DEAL_*

Anlaşma işleme ile ilgili ticari işlemler için (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE ve TRADE_TRANSACTION_DEAL_DELETE), MqlTradeTransaction yapısında aşağıdaki alanlar doldurulur:

  • anlaşma - anlaşma bileti;
  • sipariş - anlaşmanın yapıldığı sipariş bileti;
  • sembol - anlaşmadaki finansal aracın adı;
  • tür - ticari işlem türü;
  • anlaşma_tipi - anlaşma türü;
  • fiyat - anlaşmanın yapıldığı fiyat;
  • price_sl - Zarar Durdur fiyatı (anlaşmanın yapıldığı sırada belirtilmişse doldurulur);
  • price_tp - Kar Al fiyatı (anlaşmanın yapıldığı sırada belirtilmişse doldurulur);
  • hacim - lotlar halinde işlem hacmi.
  • pozisyon - anlaşmanın yürütülmesi sonucunda açılan, değiştirilen veya kapatılan pozisyonun bileti.
  • position_by - karşı konum bileti. Yalnızca karşıt bir pozisyonu kapatmak için (out by) anlaşmalar için doldurulur.

Ve MqlTradeResult &sonucunu izlemeniz gerekiyor

Ama artık 1000 satır kodunuz var!

 
prostotrader :

Aynı ruhla devam :)

Küçük ipucu MqlTradeTransaction &trans - YALNIZCA alanlar alakalı

TRADE_TRANSACTION_DEAL_*

Anlaşma işleme ile ilgili ticari işlemler için (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE ve TRADE_TRANSACTION_DEAL_DELETE), MqlTradeTransaction yapısında aşağıdaki alanlar doldurulur:

  • anlaşma - anlaşma bileti;
  • sipariş - anlaşmanın yapıldığı sipariş bileti;
  • sembol - anlaşmadaki finansal aracın adı;
  • tür - ticari işlem türü;
  • anlaşma_tipi - anlaşma türü;
  • fiyat - anlaşmanın yapıldığı fiyat;
  • price_sl - Zarar Durdur fiyatı (anlaşmanın yapıldığı sırada belirtilmişse doldurulur);
  • price_tp - Kar Al fiyatı (anlaşmanın yapıldığı sırada belirtilmişse doldurulur);
  • hacim - lotlar halinde işlem hacmi.
  • pozisyon - anlaşmanın yürütülmesi sonucunda açılan, değiştirilen veya kapatılan pozisyonun bileti.
  • position_by - karşı konum bileti. Yalnızca karşıt bir pozisyonu kapatmak için (out by) anlaşmalar için doldurulur.

Ve MqlTradeResult &sonucunu izlemeniz gerekiyor

Ama artık 1000 satır kodunuz var!

Tabii ki, egonun patladığını anlıyorum. Tecrübe, her şey...

Ancak buraya biraz alaycılık için değil, yardım için geldim. Biraz daha yukarıya bakarsanız, Deal_add için doldurulmayan alanları ayrıştırırken hata yaptığımı kabul ettiğimi göreceksiniz.

Daha yapıcı yardım için size minnettar olurum, kendimi "bozabilirim") Yapıcı eleştiriyi kabul ediyorum.

Hakkında " Ve MqlTradeResult &result "'a bakmanız gerekiyor.

Referansa göre, bir ticaret işleminin sonucu sadece TRADE_TRANSACTION_REQUEST için doldurulur ve sadece bu tür işlemler için analiz edilmesi gerekir.

 

Garip bir algınız var.

Birini “bozmak” için düşüncelerimde bile yoktu, görünüşe göre böyle bir yaşam algınız var ve

Muhtemelen sık sık kendin kullanıyorsun.

Ve "patlayan" ben değilim, fxsaber (a), çünkü neredeyse her konuda

geliştirme, ancak aynı zamanda gerçek hayatta ticaret yapmıyor ve hatta FORTS'ta daha da fazlası!

Aynı soruna basit ve karmaşık çözümler var.

Sorunuza bakılırsa, yeni başlayan birisiniz.

Ama dedikleri gibi "Basit yollar aramıyoruz"!

OnTradeTransaction işlevi, işlemleri basitleştirmek için özel olarak tasarlanmıştır.

robotların geliştirilmesinde programcılar için "hayat", AMA onu kullanmak istemeyen eski zamanlayıcılar,

çünkü OnTrade'e alışkınlar ve bir şekilde çalışması için bir sürü kod yazmanız gerekiyor.

Sana zaten söyledim, anlaşma değil , emir her şeyin başıdır!

İlk siparişin hacmi 1 değil, 2, 10 ise ne yapacaksınız?

Bekleyen bir emir belirlersiniz, yani onu "zorla" kontrol edemezsiniz ve hatta daha fazlası

anlaşmalarda! Bekleyen siparişlerle ilgili birçok tuzak var.

Ancak, kendiniz denemek yerine, şüpheli bir hazır çözüm almış basit bir yol seçtiniz.

çöz (ipuçlarıyla) - sahibi bir beyefendi.

Hayırlı olsun artık katılmıyorum

 
prostotrader :

Garip bir algınız var.

Birini “bozmak” için düşüncelerimde bile yoktu, görünüşe göre böyle bir yaşam algınız var ve

Muhtemelen sık sık kendin kullanıyorsun.

Ve "patlayan" ben değilim, fxsaber (a), çünkü neredeyse her konuda

geliştirme, ancak aynı zamanda gerçek hayatta ticaret yapmıyor ve hatta FORTS'ta daha da fazlası!

Aynı soruna basit ve karmaşık çözümler var.

Sorunuza bakılırsa, siz bir acemisiniz.

Ama dedikleri gibi "Basit yollar aramıyoruz"!

OnTradeTransaction işlevi, işlemleri basitleştirmek için özel olarak tasarlanmıştır.

robotların geliştirilmesinde programcılar için "hayat", AMA onu kullanmak istemeyen eski zamanlayıcılar,

çünkü OnTrade'e alışkınlar ve bir şekilde çalışması için bir sürü kod yazmanız gerekiyor.

Sana zaten söyledim, anlaşma değil , emir her şeyin başıdır!

İlk siparişin hacmi 1 değil, 2, 10 ise ne yapacaksınız?

Bekleyen bir emir belirlersiniz, yani onu "zorla" kontrol edemezsiniz ve hatta daha fazlası

anlaşmalarda! Bekleyen siparişlerle ilgili birçok tuzak var.

Ancak, kendiniz denemek yerine, şüpheli bir hazır çözüm almış basit bir yol seçtiniz.

çöz (ipuçlarıyla) - sahibi bir beyefendi.

Hayırlı olsun artık katılmıyorum

Hazır çözümler kullanmadığım gerçeğiyle başlayalım. Orada benim için ne düşündüğünüzü bilmiyorum ama konudan tek bir çözüm kullanmadım (faydalı bilgiler öğrenmeme rağmen) ve hala denemeye ve anlamaya çalışıyorum. Genel olarak, yazılarınızdan başkaları için düşünmeyi sevdiğinizi fark ettim. Suç yok.

Siparişin hangi hacme sahip olacağı ne fark eder. Gerçekte ne kadar hacmin karşılandığını anlayacağım işlemde. Bana öyle geliyor ki, bu, ilgili sipariş doldurma türüne göre kısmi sipariş doldurmalarını yakalamaktan daha kolay. Ayrıca başlıklardan birinde, yalnızca bir anlaşmanın pozisyonun oluşturulduğuna dair güven verdiği vurgulandı.

 
Илья Ребенок :

Hazır çözümler kullanmadığım gerçeğiyle başlayalım. Orada benim için ne düşündüğünüzü bilmiyorum ama konudan tek bir çözüm kullanmadım (faydalı bilgiler öğrenmeme rağmen) ve hala denemeye ve anlamaya çalışıyorum. Genel olarak, yazılarınızdan başkaları için düşünmeyi sevdiğinizi fark ettim. Suç yok.

Siparişin hangi hacme sahip olacağı ne fark eder. İşlem temelinde, gerçekte ne kadar hacmin yerine getirildiğini anlayacağım. Bana öyle geliyor ki, bu, ilgili sipariş doldurma türüne göre kısmi sipariş doldurmalarını yakalamaktan daha kolay. Ayrıca başlıklardan birinde, yalnızca bir anlaşmanın, pozisyonun oluşturulduğuna dair güven verdiği vurgulandı.

Okumayı unuttun mu?

" İyi şanslar, artık katılmıyorum. "