위대하고 끔찍한 MT4 영원히 (또는 전환 전략을 올바르게 개발하는 방법) - 페이지 25

 
Igor Makanu :

LAN에서 서버 삭제

이 서버(보다 정확하게는 브로커 소프트웨어에서)는 스팸으로부터 보호됩니다. 다음 주까지 그들은 그것을 업데이트할 계획입니다. 그러면 브레이크는 사라질 것입니다.

 
fxsaber :

이 서버를 확인해봐야겠습니다. 여기에서 제안하는 목발 을 확인하는 것이 좋을 것입니다. 누구에게 중요해 보입니다.

나는 잠시 후에 이 주제로 돌아가고 싶지 않습니다. 버그가 있으면 즉시 지적하는 것이 좋습니다.

MT4 스타일은 아직 옵션이 없나요?

다른 서버에서 100개의 위치를 여는 스크립트를 실행하시겠습니까?

 
Andrey Khatimlianskii :

MT4 스타일은 아직 옵션이 없나요?

아직 시작하지 않았습니다. 대부분의 경우 사용자는 코드에서 아무 것도 변경하지 않을 것입니다. 추가 참여 기능은 매크로를 통해 이루어집니다.

다른 서버에서 100개의 위치를 여는 스크립트를 실행하시겠습니까?

예, 다른 서버에 있지만 다른 스크립트 입니다. 작동 후 몇 분 이내에 배가 되지 않으면 테스트가 성공적으로 통과된 것입니다. 그렇지 않으면 - 실패.

Библиотеки: TradesID
Библиотеки: TradesID
  • 2021.03.29
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: TradesID
 
fxsaber :

아직 시작하지 않았습니다. 대부분의 경우 사용자는 코드에서 아무 것도 변경하지 않을 것입니다. 추가 참여 기능은 매크로를 통해 이루어집니다.

만들어진.

Библиотеки: MT4Orders
Библиотеки: MT4Orders
  • 2021.02.09
  • www.mql5.com
MT4Orders: Автор: fxsaber...
 

그랬다.

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

위대하고 끔찍한 MT4 영원히 (또는 전환 전략을 올바르게 개발하는 방법)

fxsaber , 2021.05.11 09:05

위치를 기다리지 않고 결과가 즉시 나타납니다.

 #include <fxsaber\TradesID\ByPass.mqh>
#include <MT4Orders.mqh>

#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

void OnStart ()
{
  BYPASS ByPass;
  
  MT4ORDERS::OrderSend_MaxPause = 0 ; // Запрет на ожидание позиции после OrderSend
  
   while ( OrdersTotal () < 30 )
     if (ByPass.Is())
      ByPass += OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, 0 , 0 , 0 );      
    
   Print ( OrdersTotal ());
}

그것은 ~가되었다.

 #define MT4ORDERS_BYPASS_MAXTIME 1000000 // Максимальное время (в мкс.) на ожидание синхронизации торгового окружения
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

void OnStart ()
{
  MT4ORDERS::OrderSend_MaxPause = 0 ; // Запрет на ожидание позиции после OrderSend
  
   while ( OrdersTotal () < 30 )
     OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, 0 , 0 , 0 );       
    
   Print ( OrdersTotal ());
}


이제 안정성을 포함하여 MT4 버전과 다르지 않습니다.

MT5로 작성하기 어려운 모든 예제는 그래야 하는 대로 구현하기 쉬워졌습니다.

 

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

위대하고 끔찍한 MT4 영원히 (또는 전환 전략을 올바르게 개발하는 방법)

이고르 마카누 , 2021.05.10 10:28

다음과 같이 작동하는 것 같습니다.

 #include <Trade\Trade.mqh>
void OnStart ()
{
   CTrade Trade;
   while ( PositionsTotal () < 10 )
   {
       if ( OrdersTotal () > 0 ) continue ;
       if (!Trade.Buy( 0.01 )) continue ;
       if ( OrdersTotal () == 0 && PositionsTotal () >= 10 ) return ;
   }
}

그러나 매우 천천히, 그리고 해결책은 그저 그렇습니다

10번째 포지션을 오픈하기 위해 주문을 한 후 다음 반복에서 조건이 충족되면 어떻게 될까요?

 while ( PositionsTotal () < 10 )

PositionTotal은 아직 업데이트되지 않았으며(=9), 주문은 이미 기록에 포함되었으며 OrdersTotal()==0입니다.

1. 그러면 또 다른 Trade.Buy()가 실행됩니까?

2. 이론적으로 이것은 여러 번 반복될 수 있습니까?

아니면 내가 뭔가를 놓쳤나요?

 
mktr8591 :

10번째 포지션을 오픈하기 위해 주문을 한 후 다음 반복에서 조건이 충족되면 어떻게 될까요?

PositionTotal은 아직 업데이트되지 않았으며(=9), 주문은 이미 기록에 포함되었으며 OrdersTotal()==0입니다.

1. 그러면 또 다른 Trade.Buy()가 실행됩니까?

2. 이론적으로 이것은 여러 번 반복될 수 있습니까?

아니면 내가 뭔가를 놓쳤나요?

이것들은 그의 고주파 관심사이고 나머지는 충분한 시간 초과가 있으며 두 번째 실행에는 문제가 없습니다.

MT4에서는 그런 식으로 구축되어 있다고 확신합니다. 기대가 컸습니다.
 
mktr8591 :

10번째 포지션을 오픈하기 위해 주문을 한 후 다음 반복에서 조건이 충족되면 어떻게 될까요?

PositionTotal은 아직 업데이트되지 않았으며(=9), 주문은 이미 기록에 포함되었으며 OrdersTotal()==0입니다.

1. 그러면 또 다른 Trade.Buy()가 실행됩니까?

물론 그럴 것이다. 결국 코드의 논리는 정확히 동일합니다.

2. 이론적으로 이것은 여러 번 반복될 수 있습니까?

Buy가 true이면 다음 반복에서 OrdersTotal() == 0이 될 확률은 거의 0입니다. 즉, 실제로 12개 위치를 여는 것은 불가능합니다.


여기에 매우 원시적인 경우가 표시됩니다. 겹침은 종종 다음과 같습니다.

  1. 지정가 주문이 있습니다 OrdersTotal = 1, PositionsTotal = 0
  2. 한도가 충족되고 있습니다. OrdersTotal = 0, PositionsTotal = 0.
  3. 포지션이 열렸습니다. OrdersTotal = 0, PositionsTotal = 1.

그래서 두 번째 단계에서 어드바이저는 아무것도 없음을 확인하고 한계를 설정합니다. 결과적으로 두 개의 열린 위치가 있습니다.

두 번째 요점은 동기화되지 않은 MT5입니다. 그리고 이제 목발은 그를 우회합니다.

 

고맙습니다.

이것을 고려하면:

fxsaber :

Doubles는 MT5의 어려움이 아니라 Total() 함수가 false를 표시할 때 아키텍처 버그입니다.

버그라고 할 수 있지만 다르게 표현할 수 있어요 :-)

PositionsTotal()은 열린 위치의 수가 아니라 열린 위치 테이블의 크기입니다. 위치 테이블은 실제로 거래 내역 캐시와 유사한 캐시이지만 요청 시 업데이트되지 않고 자동으로 업데이트되지만 즉시 업데이트되지는 않지만 약간의 지연이 있습니다. 이 때문에 이미 열린 위치를 포함하지 않거나 이미 닫힌 위치를 포함할 수 있습니다.

OrdersTotal()과 동일합니다.

인증서가 이런 식으로 작성되면 질문, 불만 및 오해가 훨씬 줄어 듭니다.

그리고 "MetaTrader 5의 주문, 위치 및 거래" 기사에서 여기에 주의를 기울일 수 있습니다(지금은 모호합니다. - "PositionsTotal() 함수 실행 결과는 위치 캐시 채우기에 의존하지 않습니다. - 항상 모든 기호에 대해 터미널 데이터베이스에서 열린 위치의 실수를 반환합니다 .")


추신 하지만 논리적인 질문이 발생합니다. 목발을 생성하지 않도록 라이브 주문, 위치, 거래 및 실행된 주문 테이블의 동기화 상태를 결정하는 시스템 기능/플래그를 만드는 것이 어떻습니까?
 
mktr8591 :

추신 하지만 자연스러운 질문이 생깁니다. 목발을 생산하지 않도록 라이브 주문, 포지션, 거래 및 실행된 주문 테이블의 동기화 상태를 결정하는 시스템 기능/플래그를 만드는 것이 어떻습니까?

아마도 내부에 그러한 깃발이 없을 것입니다.