도움이 필요하다

 

문제는 다음
나는 실제로 언어를 이해하지 못하고 여러 VP에 대한 주문 열기를 자동화해야했습니다. 그런 간단한 코드를 스케치했지만 (파일 첨부) 왠지 서투른 것으로 판명되었습니다.
계획상으로는 6ch 열어야 하는데 3ch만 뜨는데 가끔 6 다 열리기도 하고 또 정상작동을 멈춘다. , JPY가 없는 블록에서는 모든 것이 잘 작동하기 때문입니다.
이 문제를 해결하도록 도와주세요.
그래도 어렵지 않다면 매수 또는 매도로만 거래 개시를 전환할 수 있도록 처방하는 방법을 알려주세요.

파일: 위험한 파일이 삭제되었습니다 .

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Информация об инструменте - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Sergey Korsunov :

문제는 다음
나는 실제로 언어를 이해하지 못하고 여러 VP에 대한 주문 열기를 자동화해야했습니다. 그런 간단한 코드를 스케치했지만 (파일 첨부) 왠지 서투른 것으로 판명되었습니다.
계획상으로는 6ch 열어야 하는데 3ch만 뜨는데 가끔 6 다 열리기도 하고 또 정상작동을 멈춘다. , JPY가 없는 블록에서는 모든 것이 잘 작동하기 때문입니다.
이 문제를 해결하도록 도와주세요.
그래도 어렵지 않다면 매수 또는 매도로만 거래 개시를 전환할 수 있도록 처방하는 방법을 알려주세요.

파일: 위험한 파일이 삭제되었습니다 .

버튼을 사용하여 파일을 첨부해야 합니다. 파일을 첨부 .

 
확인
파일:
Test_3.mq4  7 kb
 
Sergey Korsunov :

문제는 다음
나는 실제로 언어를 이해하지 못하고 여러 VP에 대한 주문 열기를 자동화해야했습니다. 그런 간단한 코드를 스케치했지만 (파일 첨부) 왠지 서투른 것으로 판명되었습니다.
계획상으로는 6ch 열어야 하는데 3ch만 뜨는데 가끔 6 다 열리다가 다시 정상작동을 멈춥니다 , JPY가 없는 블록에서는 모든 것이 잘 작동하기 때문입니다.
이 문제를 해결하도록 도와주세요.
그래도 어렵지 않다면 매수 또는 매도로만 거래 개시를 전환할 수 있도록 처방하는 방법을 알려주세요.

주문을 열지 못하는 데에는 여러 가지 이유가 있습니다. 첫 번째 틱에서 3개의 주문이 열렸다고 가정합니다.

프로그램의 맨 처음에 있는 다음 틱에서 if(OrdersTotal() >= OrderCount) return; 반환이 있을 것입니다, 왜냐하면 주문 수가 1 인 OrderCount 보다 큽니다.

나머지 프로그램은 무시됩니다.

다음 줄로 판단:

 //|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link        " https://www.mql5.com "

이 프로그램은 MetaQuotes Software Corp.에서 개발했습니다. 조언을 위해 그들에게 연락하십시오!

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
a007 # :

주문을 열지 못하는 데에는 여러 가지 이유가 있습니다. 첫 번째 틱에서 3개의 주문이 열렸다고 가정합니다.

프로그램의 맨 처음에 있는 다음 틱에서 if(OrdersTotal() >= OrderCount) return; 반환이 있을 것입니다, 왜냐하면 주문 수가 1 인 OrderCount 보다 큽니다.

나머지 프로그램은 무시됩니다.

다음 줄로 판단:

이 프로그램은 MetaQuotes Software Corp.에서 개발했습니다. 조언을 위해 그들에게 연락하십시오!

추가 주문이 열렸음을 의미합니까?

 
Fast235 # :

추가 주문이 열렸음을 의미합니까?

아니요, 반대로 6개의 다른 통화 쌍이 필요하지만 3개만 엽니다.

그런데 엔으로 VP가 없는 곳에서는 6개 모두 메인과 크로스를 모두 오픈하고 엔으로 VP가 있는 곳에서는 3개만 오픈한다.
그런 고민

 
Sergey Korsunov # :

아니요, 반대로 6개의 다른 통화 쌍이 필요하지만 3개만 엽니다.

가장 간단한 것은 각 주문을 연 후에 Sleep()을 넣는 것입니다. 터미널은 번호를 업데이트할 시간이 없습니다(성능을 위해 분명히)

 
Fast235 # :

가장 간단한 것은 각 주문을 연 후에 Sleep()을 넣는 것입니다. 터미널은 번호를 업데이트할 시간이 없습니다.

나는 언어를 정말로 이해하지 못한다.
순전히 그물에 있는 예제에 대한 코드를 작성했습니다.
내 코드에 Sleep()을 삽입하는 데 도움이 됩니다.

 
Sergey Korsunov # :

나는 언어를 정말로 이해하지 못한다.
순전히 그물에 있는 예제에 대한 코드를 작성했습니다.
내 코드에 Sleep()을 삽입하는 데 도움이 됩니다.

OrderSend 후 Sleep(50);

도움이되지 않으면 50에서 100-200으로 증가

 
Fast235 # :

OrderSend 후 Sleep(50);

도움이되지 않으면 50에서 100-200으로 증가

도움이되지 않았습니다 ((

 
Sergey Korsunov # :

도움이되지 않았습니다 ((

이것을 시도하십시오 - 더 짧고 더 정확합니다. 스스로 알아내면 프로그래밍의 선두주자가 될 것입니다. 커서를 단어에 놓고 F1 키를 누릅니다.

 //+------------------------------------------------------------------+
//|                                                       Test 3.mq4 |
//+------------------------------------------------------------------+
#property strict

extern double Lot   = 0.01 ;
extern int     Slip  = 3 ;
extern int     Magic = 777 ;

string name[ 10 ]={ "AUDJPY" , "CHFJPY" , "CADJPY" , "AUDCAD" , "AUDCHF" , "CADCHF" };
int     cnt[ 6 ];

void OnTick ()
{
   ArrayInitialize (cnt, 0 ); // Обнуление счетчиков

   // Подсчет ордеров по каждому торговому инструменту
   for ( int n= OrdersTotal ()- 1 ; n>= 0 ; n--)
   {
     if (! OrderSelect (n,SELECT_BY_POS)) continue ;
     for ( int k= 0 ; k< 6 ; k++) if (OrderSymbol()==name[k]) cnt[k]++;
   }

   // Открытие ордеров по каждому торговому инструменту
   for ( int k= 0 ; k< 6 ; k++) if (!cnt[k]) int ticket = OrderSend (name[k],OP_BUY, Lot, MarketInfo(name[k],MODE_ASK), Slip, 0 , 0 , "" , Magic);
}