MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1013

 

MQL5에서 보류 중인 주문 을 제어하는 방법은 무엇입니까?


문제는 내가 필요한 기능에서 다음과 같이 작성한다는 것입니다. "포지션과 활성 보류 주문을 서로 혼동해서는 안 됩니다."


그런 다음 이러한 보류 중인 주문에 대한 정보를 얻는 방법은 무엇입니까?

 
Alexandr Sokolov :

MQL5에서 보류 중인 주문 을 제어하는 방법은 무엇입니까?


문제는 내가 필요한 기능에서 다음과 같이 작성한다는 것입니다. "포지션과 활성 보류 주문을 서로 혼동해서는 안 됩니다."


그런 다음 이러한 보류 중인 주문에 대한 정보를 받는 방법은 무엇입니까?

대기 중인 주문을 계산하기만 하면 됩니다. 예를 들어, 이 기능은 보류 중인 중지 주문에만 사용됩니다.

 //+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders( int &count_buy_stops, int &count_sell_stops)
  {
   count_buy_stops   = 0 ;
   count_sell_stops  = 0 ;

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) // returns the number of current orders
       if (m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if (m_order. Symbol ()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
             if (m_order.OrderType()== ORDER_TYPE_BUY_STOP )
               count_buy_stops++;
             else
               if (m_order.OrderType()== ORDER_TYPE_SELL_STOP )
                  count_sell_stops++;
           }
  }
 
Vladimir Karputov :

대기 중인 주문을 계산하기만 하면 됩니다. 예를 들어, 이 기능은 보류 중인 중지 주문에만 사용됩니다.

매우 감사합니다!


방금 예를 보았고 모든 것이 Position을 통해 이루어졌습니다 ...

 
Alexandr Sokolov :

매우 감사합니다!


방금 예를 보았고 모든 것이 Position을 통해 이루어졌습니다 ...

다음은 컴파일하는 예입니다.

 //+------------------------------------------------------------------+
//|                                    CalculateAllPendingOrders.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link        "http://wmua.ru/slesar/"
#property version    "1.00"
#property script_show_inputs
//---
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
COrderInfo     m_order;                       // object of COrderInfo class
//--- input parameters
input ulong     InpMagic             = 200 ;         // Magic number
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   if (!m_symbol.Name( Symbol ())) // sets symbol name
     {
       Print ( __FILE__ , " " , __FUNCTION__ , ", ERROR: CSymbolInfo.Name" );
       return ;
     }
//---
   int count_buy_stops= 0 ,count_sell_stops= 0 ;
   CalculateAllPendingOrders(count_buy_stops,count_sell_stops);
  }
//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders( int &count_buy_stops, int &count_sell_stops)
  {
   count_buy_stops   = 0 ;
   count_sell_stops  = 0 ;

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) // returns the number of current orders
       if (m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if (m_order. Symbol ()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
             if (m_order.OrderType()== ORDER_TYPE_BUY_STOP )
               count_buy_stops++;
             else
               if (m_order.OrderType()== ORDER_TYPE_SELL_STOP )
                  count_sell_stops++;
           }
  }
//+------------------------------------------------------------------+
 
Alexandr Sokolov :

MQL5에서 보류 중인 주문 을 제어하는 방법은 무엇입니까?


문제는 내가 필요한 기능에서 다음과 같이 작성한다는 것입니다. "포지션과 활성 보류 주문을 서로 혼동해서는 안 됩니다."


그런 다음 이러한 보류 중인 주문에 대한 정보를 얻는 방법은 무엇입니까?

유일한 차이점은 mql4에서 OrdersTotal() 함수가 시장 및 보류 중인 주문의 총 수를 반환한다는 것입니다. 그리고 mql5에서는 보류 중인 주문 수만 반환합니다. 그리고 포지션 수를 얻기 위해 mql4 시장 주문의 용어로 PositionsTotal() 함수가 있습니다.

 
Alexey Viktorov :

포럼에서 해당 주제를 보지는 못했지만 몇 가지 지침을 살펴본 후 이 지침이 더 이해하기 쉬운 것 같습니다 . 나는 그것을 시도했지만 효과가 있었지만 아직 적용할 필요가 없다고 생각합니다. 모든 터미널의 이력을 하나의 폴더에 결합하는 것이 좋을 것이라고 생각하지만.

링크에서 글을 읽었습니다. 이것은 천재입니다. 그리고 이것은 터미널이 많은 사람들을 위한 슈퍼 솔루션입니다. 이제 계속해서 파일을 앞뒤로 복사할 필요 없이 여러 터미널에 대해 하나의 mql4 폴더가 있을 수 있습니다.

매우 감사합니다!!!

 
Sergey Likho :

링크에서 글을 읽었습니다. 이것은 천재입니다. 그리고 이것은 터미널이 많은 사람들을 위한 슈퍼 솔루션입니다. 이제 계속해서 파일을 앞뒤로 복사할 필요 없이 여러 터미널에 대해 하나의 mql4 폴더가 있을 수 있습니다.

매우 감사합니다!!!

고마워하지마 세르게이 타볼린의 메시지에 귀를 기울이고 그 중 몇 마디를 Seric29의 욕망과 비교했는데 글쎄, 나는 그것이 무엇인지 직접 보았습니다.

 

안녕하세요.

코드를 알아낼 수 있도록 도와주세요.

그리드를 시장에 내놓으려고 했더니 저에게 욕을 하기 시작했습니다: 2016.04.01 00:02:00 1111111113241135454356146 EURUSD,H1: FreeMarginCheck 기능 에 대한 유효하지 않은 로트 금액

첨부파일은 Expert Advisor 파일입니다.

미리 감사드립니다.

Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
파일:
123.mq4  87 kb
 
Dmitriy Prigodich :

안녕하세요.

코드를 알아낼 수 있도록 도와주세요.

그리드를 시장에 내놓으려고 했더니 저에게 욕을 하기 시작했습니다: 2016.04.01 00:02:00 1111111113241135454356146 EURUSD,H1: FreeMarginCheck 기능 에 대한 유효하지 않은 로트 금액

첨부파일은 Expert Advisor 파일입니다.

미리 감사드립니다.

그것은 또한 말합니다: 유효하지 않은 로트 금액

EA의 인수가 확인되지 않고 로트의 볼륨이 정규화되지 않습니다.

추신 - 글쎄, 시장에 모든 것을 연속으로 두지 마십시오. 자신이 사용하지 않는 것이 더 많습니다. 평가 필요, 더 나은 codobase 보충

 

일반적으로 남자들은 실험을했고 비디오를 찍고 싶었지만 카메라가 없었고 아직 완두콩 왕 아래 있던 오래된 전화가 있습니다. 그래서 나는 전문가를 만들었고 111.mq4라고 불렀습니다.

다음은 원시 코드입니다.

 #property strict
#import "111б.ex4" //111б.mq4
int Funi( string Soob);
#import

int OnInit (){Funi( Symbol ()); return ( INIT_SUCCEEDED );}
void OnDeinit ( const int reason){}
void OnTick (){Funi( Symbol ());}


, 그런 다음 라이브러리를 만들고 기본 코드로 111b.mq4라고 불렀습니다.

 #property library
#property strict
 string   st_mas[]; //export
 int Funi( string Soob) export
 {st_mas[( ArrayResize (st_mas, ArrayRange (st_mas, 0 )+ 1 ))- 1 ]=Soob;
 Print ( "Размер массива = " , ArrayRange (st_mas, 0 ));
 for ( int i=0;i< ArrayRange (st_mas, 0 );++i)
 Print ( "Вывод массива " ,st_mas[i]);
 return 2 ;}

. 라이브러리 내부에서 문자열 형식의 배열을 선언했지만 나중에 밝혀진 것처럼 개발자는 배열과 변수를 내보내고 가져올 가능성을 제공하지 않았습니다. 정보를 기억할 전역 배열을 얻을 방법이 없다는 것이 밝혀졌습니다. 글쎄, 알았어, 나는 다른 길로 갔다. Funi() 함수를 만들었습니다. 다음으로 H 키를 사용하여 하드 링크를 만들었습니다. 내 터미널은 다음과 같이 설치됩니다.

Forex4you에는 원본 파일이 있고 Forex4you1에는 링크가 있으며 로봇에 원본과 차트 링크를 남겨두었는데 첫 번째 계산이 수신되었지만 틱이 시작되면 원본 Forex4you만 정보와 st_mas 를 업데이트했습니다. 어레이의 크기가 증가하고 Forex4you1에 틱이 있을 때 아무 일도 일어나지 않았으며 파일이 수동으로 차트에 입력되어야만 상호 작용이 가능합니다. 그 다음 나는 다른 길로 갔다. 333.mq4라는 이름으로 Expert Advisor를 만들어 MT4 Forex4you1에 설치했습니다. 111b.mq4 라이브러리를 연결하고 프로그램을 차트에 던졌습니다. Robot 333.mq4는 라이브러리에 대한 링크에 연결할 수 있었고 이 비즈니스는 온라인으로 작동하기 시작했지만 나중에 밝혀진 대로 라이브러리는 프로토타입이고 전역 수준에서 선언된 배열이 동일한 차트 내에서 작동합니다.

이 예는 로봇이 전역 배열로 라이브러리에 연결되어 있음에도 불구하고 이 배열이 프로토타입으로 작동하고 여전히 상호 작용을 보장할 수 없음을 보여줍니다. 모든 측면에서 사용할 수 있는 공통 변수를 생성해야 합니다. . 배열과 변수를 내보낼 수 있는지 누가 압니까? 파일에 정보를 기록함으로써 이 문제를 해결할 수 있는 또 다른 옵션이 있다고 생각합니다. 왜냐하면. 파일은 프로토타입이 아니며 양쪽에서 읽을 수 있으므로 터미널과 로봇이 서로 상호 작용할 수 있습니다. 파일 작업 방법을 아는 사람은 이 이론을 확인하십시오. 저는 아직 그런 경험이 없습니다.

배열과 변수를 내보낼 수 있는지 아는 사람?