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

 
새로운 표준 기능.
 int OrderExist( const string symbol, ENUM_ORDER_TYPE type, ulong magic, ulong &tickets[] );

int PositionExist( const string symbol, ENUM_POSITION_TYPE type, ulong magic, ulong &tickets[] );
 

인사말. 어디로 가야하는지 조언이나 링크를 제공하십시오.

VPS WinServer 2012 R2, MT4가 시작되고 어느 시점에서 언로드되며 다시 시작해야 합니다.

어디를 봐야할지 등등...

미리 감사드립니다.

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql5 언어의 특징, 미묘함 및 작업 방법

fxsaber , 2020.08.20 18:52

RannForex-Server 데모 계정에 다음 코드가 있으면 이 Expert Advisor를 실행하면 이 상황을 즉시 재현할 수 있습니다.

 // Воспроизведение ситуации наличия позиции и отложенного ордера с одинаковыми тикетами.

#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

MqlTradeResult Result = { 0 };
MqlTradeRequest Request = { 0 };

int OnInit ()
{

        Request.action = TRADE_ACTION_PENDING ;
        Request.symbol = _Symbol ;
        Request.volume = 100 ;
        Request.price = Ask;
        Request.type = ORDER_TYPE_BUY_LIMIT ;
        
         return (! OrderSend (Request, Result)); // Выставили лимитник по текущей цене.
}

#define TOSTRING(A) #A + " = " + DoubleToString (A, _Digits )

void OnTradeTransaction ( const MqlTradeTransaction &, const MqlTradeRequest &, const MqlTradeResult & )
{
   if ( OrderSelect (Result.order) && ( OrderGetInteger ( ORDER_STATE ) == ORDER_STATE_PARTIAL )) // Если наш лимитник исполнился частично
  {
     if (Ask - OrderGetDouble ( ORDER_PRICE_OPEN ) < 100 * _Point )                             // и находится близко от текущей цены
    {
        Request.action = TRADE_ACTION_MODIFY ;
        Request.order = Result.order;
        Request.price = Ask - 1000 * _Point ;

       // тогда передвигаем его подальше.
       if ( OrderSend (Request, Result)) // Если синхронный OrderSend выполнился успешно, то торговое окружение должно соответствовать.
      {
         // Проверка соответствия торгового окружения.
         if ( OrderSelect (Request.order) &&                                                                 // Если получилось взять данные нашего ордера
             NormalizeDouble ( OrderGetDouble ( ORDER_PRICE_OPEN ) - Request.price, _Digits ))                   // и цена ордера не равна цене успешного OrderSend
           Alert ( "Bug:" + TOSTRING( OrderGetDouble ( ORDER_PRICE_OPEN )) + " != " + TOSTRING(Request.price)); // сообщаем о баге MT5.
      }
    }
     else
       ExpertRemove ();
  }     
}


그 과정에서 스크립트는 동기 OrderSend 실행의 버그를 보여줍니다(항상 처음은 아님).

 Alert : Bug: OrderGetDouble ( ORDER_PRICE_OPEN ) = 0.89837 != Request.price = 0.88837

수십/수백 밀리초 동안 OrderSend를 실행한 후 주문 가격은 OrderSend가 성공적으로 배치한 가격이 아니라 이전 가격입니다.

 

검색을 보내십시오 - 직접 찾지 못했습니다

SQLite의 테이블에 여러 필드가 있는 고유한 행을 얻는 방법은 무엇입니까?

추신: 누군가 예를 들어줄 수 있다면 미리 감사드립니다!

 

"포럼" 탭을 헤더 목록의 맨 위로 이동하는 아이디어는 누가 생각해 냈습니까?

나쁜 생각입니다. 아무에게도 말하지 마세요.

 
데이터베이스 의 코드 강조 표시가 일주일 이상 작동하지 않고 첨부 파일을 전환하는 것도 오류입니다.
 
Igor Makanu :

검색을 보내십시오 - 직접 찾지 못했습니다

SQLite의 테이블에 여러 필드가 있는 고유한 행을 얻는 방법은 무엇입니까?

추신: 누군가 예를 들어줄 수 있다면 미리 감사드립니다!

여러 필드에 대한 고유 키를 만듭니다(동시에 기존 데이터가 있는 행은 생성되는 고유성과 일치해야 합니다. 그렇지 않으면 오류가 발생합니다).

ALTER TABLE `t1` ADD UNIQUE (
`id` ,
`name` ,
`account`
);
 
Andrey Khatimlianskii :

여러 필드에 대한 고유 키를 만듭니다(동시에 기존 데이터가 있는 행은 생성되는 고유성과 일치해야 합니다. 그렇지 않으면 오류가 발생합니다).

네, 시도해 보겠습니다. 하지만 SQL에 대한 책을 읽어야 할 것입니다. 지식이 충분하지 않습니다.

감사하다!

 
Andrey Dik :

"포럼" 탭을 헤더 목록의 맨 위로 이동하는 아이디어는 누가 생각해 냈습니까?

나쁜 생각입니다. 아무에게도 말하지 마세요.

동의한다.

 
Andrey Dik :

"포럼" 탭을 헤더 목록의 맨 위로 이동하는 아이디어는 누가 생각해 냈습니까?

나쁜 생각입니다. 아무에게도 말하지 마세요.

뭐가 문제 야? 반사적으로?

그러나 우리는 여전히 "문서"보다 "포럼"을 더 자주 클릭합니다. 적어도 사이트에서는 ...

사유: