오류, 버그, 질문 - 페이지 803

 
Karlson :
다른 서버, 다른 500pp.
다른 서버는 어떻습니까? 이것은 같은 사람이 2개의 테스트입니다. 테스터에 지정된 통화 쌍만 다릅니다.
 
ilunga :
다른 서버는 어떻습니까? 이것은 같은 사람이 2개의 테스트입니다. 테스터에 지정된 통화 쌍만 다릅니다.
터미널 / 테스터를 업데이트하면 모든 것이 작동할 것입니다. 687 빌드가 있고 모든 것이 작동합니다.
 
fyords :

모든 것이 맞습니다, 서버 데모 MK.

그런 다음 주문을 열 때 괄호 안에 표시된 값이 무엇인지 설명하고 한 경우에는 (1.29565 / 1.29654), 다른 경우에는 (1.29443 / 1.29479 / 1.29443) 이유를 설명하십시오.

(나는 당신의 테스트 결과에 대해 이야기하고 있습니다.

피오르드 :
터미널 / 테스터를 업데이트하면 모든 것이 작동할 것입니다. 687 빌드가 있고 모든 것이 작동합니다.

어드바이저를 챔피언십에 보낼 때(자동 테스트에서) 똑같은 오류가 "크롤링 아웃"되므로 업데이트가 부분적으로만 도움이 됩니다.


뿐만 아니라. 한 번만 나옵니다("해당" 통화 쌍이 아닌 주문을 처음 시도하는 시도).

 
ilunga :
다른 서버는 어떻습니까? 이것은 같은 사람이 2개의 테스트입니다. 테스터에 지정된 통화 쌍만 다릅니다.

테스터에 대한 기사 보기:

다른 통화 쌍에서 테스트할 때 가격이 일치하지 않아도 됩니다.

 
Rosh :

테스터에 대한 기사 보기:

다른 통화 쌍에서 테스트할 때 가격이 일치하지 않아도 됩니다.

그래서 몇 가지 테스트를 더 해봤습니다. 사실 문제는 "현재 가격"입니다.

코드:

 #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);
}

주의하십시오. 저는 기호에 1을 더한 가격(큰 마진 포함)으로 매도합니다. 동시에 현재 Ask and Bid를 인쇄하기 전과 후에


결과(GBPUSD에서 테스트한 경우):

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

주문 전후 가격은 1.29241입니다. 동시에 (주문시) 괄호 안의 가격은 1.29722입니다. 처럼? 아니면 현재 가격을 잘못 알고 있습니까? 그러면 내가 어떻게 알 수 있습니까?


둘째, 가격에 오류가 있는 경우 오류 10016(중지)이 발생한 이유는 무엇입니까?

[삭제]  
ilunga :

그러나 제거된 버그에는 여전히 존재합니다.

솔직히 정류장이 없는데 어떻게 에러 10016 이 나올 수 있는지 잘 모르겠습니다

글쎄, 나는 당신이 그곳에서 무엇을 어떻게하고 있는지 모르지만 문제는 실제로 SL에있을 가능성이 큽니다.

내 버전은 문제 없이 작동합니다. 호출은 실제로 초기화 블록에 던져져 확인과 함께 스팀 목욕을 하지 않습니다(설치하기 전에 주문이 있는지 확인하는 것이 좋습니다).

 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);
//----------------------------------------------------------------------------//
}
파일:
 
Interesting :

글쎄, 나는 당신이 그곳에서 무엇을 어떻게하고 있는지 모르지만 문제는 실제로 SL에있을 가능성이 큽니다.

내 버전은 문제 없이 작동합니다. 호출은 실제로 초기화 블록에 던져져 확인과 함께 스팀 목욕을 하지 않습니다(설치하기 전에 주문이 있는지 확인하는 것이 좋습니다).

작은 요청. OrderSend 전에 열리는 상품 의 현재 가격 을 표시하도록 코드를 수정할 수 있습니까?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
ilunga :
작은 요청. OrderSend 전에 열리는 상품 의 현재 가격 을 표시하도록 코드를 수정할 수 있습니까?

다음과 같이 시도하십시오.

   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 :
작은 요청. OrderSend 전에 열리는 상품 의 현재 가격 을 표시하도록 코드를 수정할 수 있습니까?

더치 가격? 나는 이것이 필요하지 않다고 생각합니다. 성공/실패 확인 및 주문 배치에 대한 메시지를 추가할 수 있습니다.

원칙적으로 스스로 할 수 있으며 어렵지 않아야합니다 (아이디어에 따라).

로쉬 :

다음과 같이 시도하십시오.

디버깅의 경우 제대로 작동하며 프로덕션 코드에서는 중복됩니다(적어도 약간 서투른 솔루션).

그리고 출력물은 오더체크 이후에 출력하여 오류가 발생해도 OrderSend에 도달하지 않도록 하는 것이 좋습니다.

추신

bar_info 예제를 기반으로 추가하는 것을 잊었지만 문제 없이 함수에 배치될 수 있었습니다.

 
Interesting :

더치 가격? 나는 이것이 필요하지 않다고 생각합니다. 성공/실패 확인 및 주문 배치에 대한 메시지를 추가할 수 있습니다.

원칙적으로 스스로 할 수 있으며 어렵지 않아야합니다 (아이디어에 따라).

디버깅의 경우 제대로 작동하며 프로덕션 코드에서는 중복됩니다(적어도 약간 서투른 솔루션).

그리고 출력물은 오더체크 이후에 출력하여 오류가 발생해도 OrderSend에 도달하지 않도록 하는 것이 좋습니다.

추신

bar_info 예제를 기반으로 추가하는 것을 잊었지만 문제 없이 함수에 배치될 수 있었습니다.

재미있다. 귀하의 예에서 파운드의 BUYSTOP 시작점을 제거하고 EURUSD만 남겼습니다.

요청 필드를 작성한 후 보류 중인 주문 의 가격을 표시합니다.

1) 귀하의 옵션 - 대기 중인 주문이 인터넷에 배치됩니다.

2012.01.01 00:00:00 가격 = 1.30487000

2) init에 주석을 달고 OnTick으로 전송했습니다. 첫 번째 틱에서만 작동하도록 조건을 설정했습니다.

2012.01.02 09:00:00 가격 = 1.29720000


추신: 내(및 귀하의) 코드에서 bar_info[1]가 현재 막대의 최대값이라는 것을 올바르게 이해하고 있습니까?

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