Sipariş numaralandırma döngüsünün organizasyonu - sayfa 8

 
Alexey Viktorov :

Gerçekten çok zor ima ettim? DC, spreadler ve komisyonlardan, programcı ise kod yazarak kazanır.

Tüccarlardan biri, spreadlerden ve komisyonlardan tasarruf etmenin gerekli olduğunu söylüyor (mümkünse ödeme yapmayın).

Başka bir tüccar, para için kod yazmanın adil olmadığını söylüyor (mümkünse ödeme yapmayın).

İkisi de cüzdanına bakar. Farklı değiller gibi...

Sadece burada bir programcı olarak ilkini destekliyor ve ikincisiyle tartışarak onun yanlış olduğunu kanıtlıyorsunuz.

Daha ucuz bir programcı bulmak isteyen bir tüccarı anlıyorum. Daha uygun ticaret koşulları arayan bir tüccarı da anlıyorum. Sorun nedir? Para biriktirmek istemenin nesi yanlış?

Ama burada tamamen farklı bir hikaye var. Algoritmanızı siparişlerle daha verimli çalışacak şekilde düşünmek ve böylece sistemin karını artırmak, iyi bir geliştirici olmak demektir. Benim düşünceme göre, sadece fikrin kaba bir kontrolü aşamasında birkaç pip ihmal edilebilir.

 
Andrey Khatimlianskii :

Daha ucuz bir programcı bulmak isteyen bir tüccarı anlıyorum. Daha uygun ticaret koşulları arayan bir tüccarı da anlıyorum. Sorun nedir? Para biriktirmek istemenin nesi yanlış?

Ama burada tamamen farklı bir hikaye var. Algoritmanızı siparişlerle daha verimli çalışacak şekilde düşünmek ve böylece sistemin karını artırmak, iyi bir geliştirici olmak demektir. Benim düşünceme göre, sadece fikrin kaba bir kontrolü aşamasında birkaç pip ihmal edilebilir.

Kusursuzca. Ve nedense ücretsiz yazma konusundaki isteksizliğini daha iyi anlıyorum. Ve sorun da yok...

Genel olarak para biriktirmeye karşı değilim ama delilik derecesinde de değilim. Yayılma üzerine tasarrufları ticaretin ön saflarına koymayın ...

 
Alexey Viktorov :

Genel olarak para biriktirmeye karşı değilim ama delilik derecesinde de değilim. Ticaretin başındaki spread'e tasarruf koymayın ...

Eğer sayarsan, böyle bir delilik değil. Ama ikna etmek gibi bir amacım yok.

 
Andrey Khatimlianskii :

Eğer sayarsan, böyle bir delilik değil. Ama ikna etmek gibi bir amacım yok.

Giderleri değil, kârları saymanız gerekir.

Maliyetlerden tasarruf ederken, kayıpları almak çok kolaydır. TS maliyete katlanmak üzere tasarlanmışsa, ancak aynı zamanda gelir de sağlıyorsa, bu iyi bir TS'dir, çünkü farklı bir senaryoda bir kayba neden olabilir.

Ve genel olarak, kazananlar yargılanmaz!

 

7'den mevcut sayfaya ayrı bir konuya ayırmak mümkün mü ("burada daha fazla tartışma" gibi bir bağlantı bile verebilirsiniz) ve bu konuda yaratıldığı şeye devam edin?

 
Vitaly Muzichenko :

Giderleri değil, kârları saymanız gerekir.

Maliyetlerden tasarruf ederken, kayıpları almak çok kolaydır. TS maliyete katlanmak üzere tasarlanmışsa, ancak aynı zamanda gelir de sağlıyorsa, bu iyi bir TS'dir, çünkü farklı bir senaryoda bir kayba neden olabilir.

Ve genel olarak, kazananlar yargılanmaz!

Bu yorumun ne hakkında olduğunu anlayamıyorum.

Süper kârlı stratejiler için komisyonun büyüklüğünün alakasızlığı hakkında mı?

 
MT4 EURUSD'de böyle bir danışman başlatalım
 // В случае изменения количества ордеров по основному символу, сигнализирует об их количестве

// #include <MT4Orders.mqh>

const bool Init =   EventSetMillisecondTimer ( 1 );

int AmountOrders( const string &Symb )
{
   int Res = 0 ;
  
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS ) && ( OrderSymbol () == Symb))
      Res++;
      
   return (Res);
}

void OnTimer ()
{
   static int PrevAmount = 0 ;
  
   const int Amount = AmountOrders( _Symbol );
  
   if (Amount != PrevAmount)
  {
    PrevAmount = Amount;
    
     Alert (Amount);
  }    
}


EURUSD için 5, USDJPY için 5 sipariş açalım. Şimdi zararsız AmountOrders koduna daha yakından bakalım ve aşağıdaki senaryoyu hayal edelim.

  1. Danışmanın yürütülmesi sırasında AmountOrders içindeyiz, burada i == 3.
  2. USDJPY'deki pozisyonu kapatıyoruz . Bundan sonra mevcut tablodaki siparişler çalkalanır.
  3. OrderSelect aracılığıyla i == 2'deki sallanma nedeniyle, 1. adımdakiyle aynı sıraya girebiliriz. Bu nedenle, AmountOrders gerçekte olduğundan bir daha fazla değer döndürebilir.


Ve işte onay

 #property strict

void OnStart ()
{
   for ( int i = 0 ; i < 5 ; i++)
     OrderSend ( _Symbol , OP_BUY , 1 , Ask , 100 , 0 , 0 );
    
   int PrevTicket = 0 ;
  
   for ( int i = OrdersTotal () - 1 ; i > 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS ))
    {
       const int Ticket = OrderTicket ();
      
       if (Ticket == PrevTicket)
         Alert ( "Hello World!" );
        
      PrevTicket = Ticket;
      
       if ( OrderSelect (i - 1 , SELECT_BY_POS ))      
         OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 100 );
    }
}


Sonuç

 2017.10 . 06 01 : 28 : 05.885 TestTets EURUSD,M1: close # 240725107 buy 1.00 EURUSD at 1.17121 at price 1.17099
2017.10 . 06 01 : 28 : 05.775 TestTets EURUSD,M1: Alert : Hello World!
2017.10 . 06 01 : 28 : 05.775 TestTets EURUSD,M1: close # 240725108 buy 1.00 EURUSD at 1.17121 at price 1.17099
2017.10 . 06 01 : 28 : 05.673 TestTets EURUSD,M1: Alert : Hello World!
2017.10 . 06 01 : 28 : 05.673 TestTets EURUSD,M1: close # 240725110 buy 1.00 EURUSD at 1.17121 at price 1.17099
2017.10 . 06 01 : 28 : 05.578 TestTets EURUSD,M1: Alert : Hello World!
2017.10 . 06 01 : 28 : 05.578 TestTets EURUSD,M1: close # 240725111 buy 1.00 EURUSD at 1.17121 at price 1.17099
2017.10 . 06 01 : 28 : 05.480 TestTets EURUSD,M1: open # 240725112 buy 1.00 EURUSD at 1.17121 ok
2017.10 . 06 01 : 28 : 05.343 TestTets EURUSD,M1: open # 240725111 buy 1.00 EURUSD at 1.17121 ok
2017.10 . 06 01 : 28 : 05.253 TestTets EURUSD,M1: open # 240725110 buy 1.00 EURUSD at 1.17121 ok
2017.10 . 06 01 : 28 : 05.138 TestTets EURUSD,M1: open # 240725108 buy 1.00 EURUSD at 1.17121 ok
2017.10 . 06 01 : 28 : 05.035 TestTets EURUSD,M1: open # 240725107 buy 1.00 EURUSD at 1.17121 ok


Aynı bilet, zararsız bir sipariş sayma döngüsünde iki kez çıkabilir!

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
fxsaber :

Aynı bilet, zararsız bir sipariş sayma döngüsünde iki kez çıkabilir!

Tüm şüpheleri ortadan kaldırmak için bunu yapıyoruz.

bir danışman koyduk

 // Советник будет алертовать, если OrderSelect соседних индексов выберет один и тот же ордер
const bool Init =   EventSetMillisecondTimer ( 1 );

void OnTimer ()
{
   int PrevTicket = 0 ;
  
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS ))
    {
       const int Ticket = OrderTicket ();
      
       if (Ticket == PrevTicket)
         Alert ( "Hello World!" );
        
      PrevTicket = Ticket;
      
       Sleep ( 1 ); // 1 миллисекунда - это много или мало?
    }
}


Komut dosyasını çalıştırın

 #property strict

void OnStart ()
{
   // Открыли позиции
   for ( int i = 0 ; i < 25 ; i++)
     OrderSend ( _Symbol , OP_BUY , 1 , SymbolInfoDouble ( _Symbol , SYMBOL_ASK ), 100 , 0 , 0 );

   int Tickets[];
   const int Total = OrdersTotal ();
  
   ArrayResize (Tickets, Total);
  
   for ( int i = 0 ; i < Total; i++)
     if ( OrderSelect (i, SELECT_BY_POS ))
      Tickets[i] = OrderTicket ();
    
   // Закрыли позиции
   for ( int i = 0 ; i < Total; i++)
     OrderClose (Tickets[i], 1 , SymbolInfoDouble ( _Symbol , SYMBOL_BID ), 100 );
}


Ve farklı endeksler altındaki danışmanın aynı emirleri nasıl seçtiğini gözlemliyoruz. Ve bu, ticaret mantığının tamamen başarısız olmasına yol açabilir.

 
fxsaber :

danışman farklı endeksler altında aynı emirleri seçer. Ve bu, ticaret mantığının tamamen başarısız olmasına yol açabilir.

Eh, aslında tüm ihtişamıyla konu! Bir sipariş döngüsü nasıl organize edilir? Örneğin, böyle bir işlevi yazmanın doğru yolu nedir?

 // Возращает количество ордеров данного символа
int AmountOrders( const string &Symb )
{
   int Res = 0 ;
  
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS ) && ( OrderSymbol () == Symb))
      Res++;
      
   return (Res);
}


İplik, yineleme döngüsü içinde bir duraklama olduğunda bazı tekrarlanan eylemlere duyulan ihtiyacı dile getirerek başladı. Etkiyi görmek için bir milisaniyelik bölgede yeterli duraklama var.

Böyle bir koltuk değneği varken

 bool IsChange( const bool InitFlag = false )
{
   static int PrevTotal = 0 ;
   static int PrevHistoryTotal = 0 ;
  
   const int Total = OrdersTotal ();
   const int HistoryTotal = OrdersHistoryTotal ();    
  
   if (InitFlag)
  {
    PrevTotal = Total;
    PrevHistoryTotal = HistoryTotal ;    
  }
  
   return (!InitFlag && ((Total != PrevTotal) || ( HistoryTotal != PrevHistoryTotal)));
}

// Возращает количество ордеров данного символа
int AmountOrders( const string &Symb )
{
   int Res = 0 ;
  
   IsChange( true );
  
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
     if ( IsChange() )
    {
      i = OrdersTotal ();
      
      Res = 0 ;
    }
     else if ( OrderSelect (i, SELECT_BY_POS ) && ( OrderSymbol () == Symb))
      Res++;
      
   return (Res);
}

Ancak her zaman doğru çalışacağının garantisi yoktur.

 
fxsaber :

Tüm şüpheleri ortadan kaldırmak için bunu yapıyoruz.

bir danışman koyduk

Komut dosyasını çalıştırın

Ve farklı endeksler altındaki danışmanın aynı emirleri nasıl seçtiğini gözlemliyoruz. Ve bu, ticaret mantığının tamamen başarısız olmasına yol açabilir.

değişti

 // Советник будет алертовать, если OrderSelect соседних индексов выберет один и тот же ордер
const bool Init =   EventSetMillisecondTimer ( 1 );

bool IsChange( const bool InitFlag = false )
{
   static int PrevTotal = 0 ;
   static int PrevHistoryTotal = 0 ;
  
   const int Total = OrdersTotal ();
   const int HistoryTotal = OrdersHistoryTotal ();    
  
   if (InitFlag)
  {
    PrevTotal = Total;
    PrevHistoryTotal = HistoryTotal ;    
  }
  
   return (!InitFlag && ((Total != PrevTotal) || ( HistoryTotal != PrevHistoryTotal)));
}

void OnTimer ()
{
   int PrevTicket = 0 ;
  
   IsChange( true );
  
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
     if ( IsChange() )
    {
      i = OrdersTotal ();
      
      PrevTicket = 0 ;
    }
    
     else if ( OrderSelect (i, SELECT_BY_POS ))
    {
       const int Ticket = OrderTicket ();
      
       if (Ticket == PrevTicket)
         Alert ( "Hello World!" );
        
      PrevTicket = Ticket;
      
       Sleep ( 1 ); // 1 миллисекунда - это много или мало?
    }
}

Şimdi uyarılar olmadan.

Neden: