Hatalar, hatalar, sorular - sayfa 803

 
Karlson :
Farklı sunucular, farklı 500 s.
Peki ya farklı sunucular? Bunlar aynı kişi tarafından yapılan 2 testtir. Yalnızca test cihazında belirtilen döviz çifti farklıdır
 
ilunga :
Peki ya farklı sunucular? Bunlar aynı kişi tarafından yapılan 2 testtir. Yalnızca test cihazında belirtilen döviz çifti farklıdır
Terminali/test cihazını güncelleyin ve belki her şey işe yarayacak, 687 derlemem var ve her şey çalışıyor.
 
fyords :

Her şeye sahibim, sunucu demosu MK.

O zaman lütfen bir sipariş açarken parantez içinde gösterilen değerin ne olduğunu ve neden bir durumda (1.29565 / 1.29654) ve diğerinde (1.29443 / 1.29479 / 1.29443) olduğunu açıklayın.

(Test sonuçlarından bahsediyorum

fiyortlar :
Terminali/test cihazını güncelleyin ve belki her şey işe yarayacak, 687 derlemem var ve her şey çalışıyor.

Şampiyonaya bir danışman gönderirken (otomatik testlerinde) tam olarak aynı hata "sürünerek" çıkıyor, bu nedenle güncelleme yalnızca kısmen yardımcı olacak


Üstelik. Sadece 1 kez çıkıyor ("kendi" döviz çifti için değil, ilk sipariş verme girişimi)

 
ilunga :
Peki ya farklı sunucular? Bunlar aynı kişi tarafından yapılan 2 testtir. Yalnızca test cihazında belirtilen döviz çifti farklıdır

Test cihazıyla ilgili makalelere bakın:

Fiyatların başka bir döviz çifti üzerinde test edilirken eşleşmesi gerekmez

 
Rosh :

Test cihazıyla ilgili makalelere bakın:

Fiyatların başka bir döviz çifti üzerinde test edilirken eşleşmesi gerekmez

Bu yüzden birkaç test daha yaptım. Gerçekten de, sorun "cari fiyat" ile ilgilidir.

kod:

 #include <Trade\SymbolInfo.mqh>
#include <Trade\Trade.mqh>

CSymbolInfo       m_sym;
CTrade            m_trade;

double bar_info[ 2 ];
bool a;

int OnInit ()
{
   SymbolSelect ( "EURUSD" , true );
   SymbolSelect ( "GBPUSD" , true );
   m_sym.Name( "EURUSD" );
   a = false ;
   return ( 0 );
}

void OnTick ()
{
   if (a) return ;
   a = true ;
   m_sym.Refresh();
   m_sym.RefreshRates();
   CopyHigh ( "EURUSD" , PERIOD_D1 , 0 , 2 , bar_info);
   Print ( "Текущая цена Ask:" + DoubleToString (m_sym.Ask()));
   Print ( "Текущая цена Bid:" + DoubleToString (m_sym.Bid()));
   Print ( "Цена открытия:" + DoubleToString (bar_info[ 1 ] + 5000 * _Point ));
   BUY_pending( "EURUSD" );
   Print ( "Текущая цена Ask:" + DoubleToString (m_sym.Ask()));
   Print ( "Текущая цена Bid:" + DoubleToString (m_sym.Bid()));
}

uint BUY_pending( string symbol)
{
   CopyHigh (symbol, PERIOD_D1 , 0 , 2 , bar_info);
   // готовим запрос
   MqlTradeRequest request = { 0 };
   ZeroMemory (request);
   request.action = TRADE_ACTION_PENDING ;
   request.magic  = 0 ;
   request.symbol = symbol;
   request.volume = 1 ;
   request.price  = m_sym.Ask() + 1;
   request.sl     = 0 ;
   request.tp     = 0 ;
   request.deviation = 10 ;
   request.type   = ORDER_TYPE_BUY_STOP ; 
   request.type_filling = ORDER_FILLING_FOK ;
   MqlTradeResult result;
   OrderSend (request,result);
   Print ( IntegerToString (result.retcode));
   return (result.retcode);
}

Dikkat edin, sembolün Satış fiyatı artı 1 (büyük bir marjla) ile açıyorum. Aynı zamanda, mevcut Sor ve Bid'i yazdırmadan önce ve sonra


Sonuçlar (GBPUSD üzerinde test edildiğinde):

GR       0        test (GBPUSD,H1)         11 : 49 : 40          2012.01 . 02 09 : 00 : 00    Текущая цена Ask: 1.29241000
LH       0        test (GBPUSD,H1)         11 : 49 : 40          2012.01 . 02 09 : 00 : 00    Текущая цена Bid: 1.29220000
QL       0        test (GBPUSD,H1)         11 : 49 : 40          2012.01 . 02 09 : 00 : 00    Цена открытия: 1.34220000
GD       0        Trade   11 : 49 : 40          2012.01 . 02 09 : 00 : 00    buy stop 1.00 EURUSD at 2.29241 ( 1.29709 / 1.29722 )
IG       0        test (GBPUSD,H1)         11 : 49 : 40          2012.01 . 02 09 : 00 : 00    10009
CP       0        test (GBPUSD,H1)         11 : 49 : 40          2012.01 . 02 09 : 00 : 00    Текущая цена Ask: 1.29241000
HG       0        test (GBPUSD,H1)         11 : 49 : 40          2012.01 . 02 09 : 00 : 00    Текущая цена Bid: 1.29220000

Sipariş verilmeden önce ve verildikten sonra fiyat 1.29241'dir. Aynı zamanda parantez içinde (sipariş verirken) fiyat 1.29722'dir. GİBİ? Yoksa mevcut fiyatı yanlış mı alıyorum? peki bunu nasıl bilebilirim?


İkincisi, fiyatta bir hata varsa, neden 10016 hatası (duruyor)?

 
ilunga :

Ancak soyulmuş hatada hala var.

Dürüst olmak gerekirse, durakların yokluğunda nasıl 10016 hatası olabileceğini tam olarak anlamıyorum.

Orada ne ve nasıl yaptığınızı bilmiyorum, sorun büyük olasılıkla gerçekten SL'de.

Sürümüm sorunsuz çalışıyor. Çağrı, kontrollerle buhar banyosu yapmaması için gerçekten başlatma bloğuna atıldı (yüklemeden önce bir siparişin varlığını kontrol etmeye değer olsa da).

 bool BUY_pending( string symbol, ENUM_TIMEFRAMES period, double volume, ulong magic = 0 )
{
//----------------------------------------------------------------------------//
//Work variables
double price = 0 , sl = 0 , tp = 0 ; //Prices: Open, Sell stop, Take profit
int ResCopy = - 1 ; //Result of copying the data into an array
int Dig     = 0 ;   //Digits

bool Result = true ; //Returned importance
//----------------------------------------------------------------------------//

ResetLastError ();

//Checking the signal to stopping the trading system
   if ( IsStopped ()) return ( false );
//Preparation of structures
ZeroMemory (TradeRequest);
ZeroMemory (TradeResult);
ZeroMemory (CheckResult);
//Copying the data into an array
ResCopy = CopyHigh (symbol,period, 0 , 2 ,bar_info);

   if (ResCopy==- 1 ) return ( false ); 
//Calculations
Dig   = ( int ) SymbolInfoInteger (symbol, SYMBOL_DIGITS );

price = NormalizeDouble (bar_info[ 1 ] + 500 * _Point ,Dig);
sl    = NormalizeDouble (price - 200 * _Point ,Dig);
tp    = NormalizeDouble (price + 1000 * _Point ,Dig);
//Preparation of request
TradeRequest.type_filling = ORDER_FILLING_FOK ;
TradeRequest.action       = TRADE_ACTION_PENDING ;
TradeRequest.type         = ORDER_TYPE_BUY_STOP ; 
TradeRequest.deviation    = 10 ;
TradeRequest.symbol = symbol;
TradeRequest.magic  = magic;
TradeRequest.volume = volume;
TradeRequest.price  = price;
TradeRequest.sl     = sl;
TradeRequest.tp     = tp;
//Checking
Result = OrderCheck (TradeRequest,CheckResult);
   if ((!Result)||(CheckResult.retcode!= 0 )) return ( false );
//OrderSend
Result = OrderSend (TradeRequest,TradeResult);
//Checking for presence of the errors
   if ( _LastError != 0 ){Result = false ;}
//----------------------------------------------------------------------------//
return (Result);
//----------------------------------------------------------------------------//
}
Dosyalar:
 
Interesting :

Pekala, orada ne ve nasıl yaptığınızı bilmiyorum, sorun büyük olasılıkla gerçekten SL'de.

Sürümüm sorunsuz çalışıyor. Çağrı, kontrollerle buhar banyosu yapmaması için gerçekten başlatma bloğuna atıldı (yüklemeden önce bir siparişin varlığını kontrol etmeye değer olsa da).

Küçük istek. Kodu, OrderSend'den önce açtığımız enstrümanın güncel fiyatını gösterecek şekilde düzeltebilir misiniz?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
ilunga :
Küçük istek. Kodu, OrderSend'den önce açtığımız enstrümanın güncel fiyatını gösterecek şekilde düzeltebilir misiniz?

Şu şekilde deneyin:

   MqlTradeResult result;
   if (! OrderSend (request,result))
     {
       PrintFormat ( "retcode=%d price=%G  Ask=%G  Bid=%G Comment=%s" ,
                  result.retcode,result.price,result.ask,result.bid,result.comment);
       //---
       PrintFormat ( "%s %s at %G Ask=%G  Bid=%G  " ,
                   EnumToString (request.type),symbol,request.price, SymbolInfoDouble (symbol, SYMBOL_ASK ),
                   SymbolInfoDouble (symbol, SYMBOL_BID ));
       Print ( "------------" );
     }
 
ilunga :
Küçük istek. Kodu, OrderSend'den önce açtığımız enstrümanın güncel fiyatını gösterecek şekilde düzeltebilir misiniz?

Duş fiyatları? Buna gerek görmüyorum, siparişin başarılı / başarısız doğrulanması ve verilmesi hakkında bir mesaj ekleyebilirsiniz.

Prensip olarak, bunu kendiniz yapabilirsiniz, zor olmamalıdır (fikre göre).

Roş :

Şu şekilde deneyin:

Hata ayıklama için gayet iyi olacak, üretim kodunda gereksiz olacak (en azından biraz beceriksiz bir çözüm)

Ve çıktıyı OrderCheck'ten sonra koymak daha iyidir, böylece bir hata durumunda OrderSend'e ulaşmaz.

not

Eklemeyi unuttum, bar_info örneğine dayanarak, fonksiyona sorunsuz bir şekilde yerleştirilebilirdi.

 
Interesting :

Duş fiyatları? Buna gerek görmüyorum, siparişin başarılı / başarısız doğrulanması ve verilmesi hakkında bir mesaj ekleyebilirsiniz.

Prensip olarak, bunu kendiniz yapabilirsiniz, zor olmamalıdır (fikre göre).

Hata ayıklama için gayet iyi olacak, üretim kodunda gereksiz olacak (en azından biraz beceriksiz bir çözüm)

Ve çıktıyı OrderCheck'ten sonra koymak daha iyidir, böylece bir hata durumunda OrderSend'e ulaşmaz.

not

Eklemeyi unuttum, bar_info örneğine dayanarak, fonksiyona sorunsuz bir şekilde yerleştirilebilirdi.

Komik. Örneğinizde, sadece EURUSD bırakarak sterlin üzerindeki BUYSTOP açılışını kaldırdım.

İstek alanlarını doldurduktan sonra bekleyen emrin fiyatını gösteriyorum.

1) Sizin seçeneğiniz - İnternette bekleyen bir sipariş verildi

2012.01.01 00:00:00 fiyat = 1.30487000

2) init'te yorum yapıldı, OnTick'e aktarıldı. Yalnızca ilk kene üzerinde çalışmak için bir koşul belirledim.

2012.01.02 09:00:00 fiyat = 1.29720000


PS (ve sizin) kodumda bar_info[1] geçerli çubuğun maksimumu olduğunu doğru anlıyor muyum?

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5