Hatalar, hatalar, sorular - sayfa 1863

 
fxsaber :

Test cihazındaki ACCOUNT_PROFIT saçmalık gösteriyor.


Ekleyeceğim:

1. değişim araçları için

Как следствие, неправильно оцениваются эквити, просадка и т.д.

2. Danışmanın mantığı, pozisyonların toplam kâr/zararına odaklanırken de yanlış çalışır.

kapatırken ACCOUNT_PROFIT okumalarına odaklanıyoruz.

 2017.04 . 20 11 : 30 : 26.318 Core 1    2017.04 . 17 18 : 02 : 46    Профит = 333.01

kapatırken, terminal karı yeniden hesaplar ve sonuç olarak elimizde

zararda kapatmak

 2017.04 . 20 11 : 30 : 26.318 Core 1    2017.04 . 17 22 : 02 : 08    Профит = - 338.66

sonuç olarak elde ederiz

 #include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
//--- global variable
CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                       // trading object
input      string symb= "GOLD-6.17" ;
input      string symb1= "GOLD-9.17" ;
input      double   ТП  = 333 ;
datetime date1;
double i1,ask1,ask2,bid1,bid2,last1,last2,profit;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   double price1= SymbolInfoDouble (symb, SYMBOL_BID );
   double price2= SymbolInfoDouble (symb1, SYMBOL_BID );
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
Comment("");
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick ()
  {
//---
      profit= AccountInfoDouble ( ACCOUNT_PROFIT );
       Comment ( "ПРофит = " ,profit);
     if ( PositionsTotal ()== 0 )
     {
      m_trade.Buy( 1.00 ,symb);
      m_trade.Buy( 1.00 ,symb1);    
     }

   if ( MathAbs (profit)>=ТП )
     {
       Print ( "Профит = " ,profit);
     CloseAll();
     }

  }  
//+------------------------------------------------------------------+
void CloseAll()
  {
   for ( int i= PositionsTotal ()- 1 ;i>= 0 ;i--) // returns the number of open positions
       if (m_position.SelectByIndex(i))
         m_trade.PositionClose(m_position.Ticket());
  }
//+------------------------------------------------------------------+

 
kaus_bonus :

Ekleyeceğim:

SD'yi anlamak...
 
Slawa :
Görünüşe göre, HFT'de bir şey anlamıyorum. Bildiğim kadarıyla, "çok hızlı" işlem yaptığınızda, önceki işlemleri umursamıyorsunuz.

HFT örnek olarak çok fazla işlem yapan bir TS verdi.

Uzun bir süre bir saç derisi yüzücü koşusu yapabilirsiniz. Ana şey, birçok işlemin (on binlerce) olmasıdır. Ardından, tarihle çalışmanın mevcut uygulamasının dezavantajları ortaya çıkacaktır.


Durum şimdi böyle. Çok fazla işlem varsa, tarihe başvurmayın.

 
fxsaber :
SD'yi anlamak...


bu havalı.

yeterli sonuç almak için SON fiyatların kullanımını kaldırmak yeterlidir.

 

Pozisyon açılış fiyatından stoploss'a kadar olan noktalarda minimum ofseti bulmama yardım et ve onları açılış fiyatına çok yaklaştırmamak ve 10016 (TRADE_RETCODE_INVALID_STOPS) hatasına düşmemek için kâr seviyeleri al. SymbolInfoInteger'ı kullanmayı denedim (aşağıdaki koda bakın), ancak bu hesaplama 0'ı döndürür. Herhangi biri bana nasıl doğru hesaplama yapacağım konusunda bir fikir verebilirse.

 void OnStart ()
  {
   long stopLevel;
   if ( SymbolInfoInteger ( "EURUSD" , SYMBOL_TRADE_STOPS_LEVEL ,stopLevel))
       Print ( "stopLevel = " ,stopLevel);
  }
 
Maxim Khrolenko :

Pozisyon açılış fiyatından stoploss'a kadar olan noktalarda minimum ofseti bulmama yardım et ve onları açılış fiyatına çok yaklaştırmamak ve 10016 (TRADE_RETCODE_INVALID_STOPS) hatasına düşmemek için kâr seviyeleri al. SymbolInfoInteger'ı kullanmayı denedim (aşağıdaki koda bakın), ancak bu hesaplama 0'ı döndürür. Herhangi biri bana nasıl doğru hesaplama yapacağım konusunda bir fikir verebilirse.


0 - sınır yok. Ama aynı zamanda SYMBOL_SESSION_PRICE_LIMIT_MIN ve SYMBOL_SESSION_PRICE_LIMIT_MAX var.
 
fxsaber :

0 - sınır yok. Ama aynı zamanda SYMBOL_SESSION_PRICE_LIMIT_MIN ve SYMBOL_SESSION_PRICE_LIMIT_MAX var.
Hmm, bu durumda SYMBOL_TRADE_STOPS_LEVEL'in bir şekilde farklı çalışmasını istiyorum. 0 - kısıtlama yoksa, teorik olarak, sunucuya .PositionOpen(...) gönderirken , açık fiyattan 1 noktada (5 basamaklı) stop koymak mümkün olacaktır, ancak daha sonra %100 hata TRADE_RETCODE_INVALID_STOPS olacaktır. açılır. Ben sıkışıp kalmışken.
 
Maxim Khrolenko :
Hmm, bu durumda SYMBOL_TRADE_STOPS_LEVEL'in bir şekilde farklı çalışmasını istiyorum. 0 - kısıtlama yoksa teorik olarak sunucuya .PositionOpen(...) gönderirken , açık fiyattan 1 noktada (5 haneli) stop koymak mümkün olacaktır, ancak burada TRADE_RETCODE_INVALID_STOPS hatası çıkacaktır. 100%. Ben sıkışıp kalmışken.

Ve bu yüzden?

 if (stoplevel== 0 ) stoplevel= SymbolInfoInteger (symb, SYMBOL_SPREAD );
 
Test cihazına tekrar bir şeyler yapıldı - 1586. Oynatma için Uzman Danışman
 #include <MT4Orders.mqh>

// Metaquotes-Demo, RTS-6.17, 2017.04.07 - 2017.04.08, на основе реальных тиков, начальный баланс 100000
void OnTick ()
{  
   static int Type = OP_BUY ;

   MqlTick Tick;    
  
   if ( OrderSelect ( 0 , SELECT_BY_POS ) && ( OrderType () <= OP_SELL ))
     OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 0 );    
   else if (( OrdersTotal () == 0 ) && SymbolInfoTick ( _Symbol , Tick) && (Tick.bid != 0 ) && (Tick.ask != 0 ))
  {
     OrderSend ( _Symbol , Type + OP_BUYLIMIT , 1 , (Type == OP_BUY ) ? Tick.ask : Tick.bid, 0 , 0 , 0 );
    
    Type = OP_SELL - Type;
  }    
}

Her tikte, ya mevcut fiyata bir limit koyar (hemen doldurulacak) ya da pozisyonu kapatır . Onlar. çok pozisyon olmalı. Ama bu böyle değil, çünkü limitler artık uygulanmıyor. İşte günlüğün sonu, gösteriyor

 2017.04 . 20 12 : 47 : 41.885 2017.04 . 07 10 : 00 : 00    sell limit 1.00 RTS- 6.17 at 114060 ( 114060 / 114180 / 113770 )
2017.04 . 20 12 : 47 : 41.885 2017.04 . 07 23 : 44 : 59    order canceled due end of test [ # 140 sell limit 1.00 RTS- 6.17 at 114060 ]
2017.04 . 20 12 : 47 : 41.885 final balance 91195.12 RUR
2017.04 . 20 12 : 47 : 41.885 RTS- 6.17 ,M1: 327182 ticks, 788 bars generated. Test passed in 0 : 00 : 00.218 .

SellLimit, Bid tarafından belirlendi, ancak hiçbir zaman yerine getirilmedi.

1585'te bununla her şey normaldi.

 
fxsaber :
Test cihazına tekrar bir şeyler yapıldı - 1586.

Ve bunun yanlış olduğunu anlıyorum, ancak yine de yapıların serbest bırakılmasına yönelik bir tür yanlış yaklaşım izlenimi var. Önceden, yapıların yayınlanmasından sonra sürekli olarak bu kadar çok sayıda hata raporu görünmüyordu.