기고글 토론 "MQL5로 하는 트레이드 오퍼레이션 - 어렵지 않아요!" - 페이지 3

 

MQL4에서 m_Trade.PositionModify를 사용하여 이 구조를 구현할 수 있는지 알려주실 수 있나요(m_Trade는 CTrade 클래스의 멤버입니다)?

...
if(TrendUp==true) 
   for(int i=0; i<10; i++)
      {
        ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0);
        if(ticket>0 && i<9) OrderModify(ticket,0,0,Ask+SPS*take_koef[i],0);
      };
...

스크립트의 요점은 주어진 수의 랏으로 시장에서 매수를 개시 한 다음 10 부분으로 테이크 프로핏을 설정하는 것입니다. 스톱로스를 설정하지 않으면 PositionModify에서 오류 10016(요청에 잘못된 스톱이 있음) 이 발생한다는 사실에 갇혔습니다.그리고 스톱을 설정하는 작업이 없습니다 :). 도움말에는 값을 지정하지 않을 수 있다고 나와 있습니다:

Параметры

symbol

[in]  Наименование торгового инструмента, по которому предполагается модифицировать позицию.

sl

[in]  Новая цена, по которой сработает Stop Loss (либо, если изменение не нужно, предыдущее значение).

tp

[in]  Новая цена, по которой сработает Take Profit (либо, если изменение не нужно, предыдущее значение).

이전 구매 요청에서 얻은 값을 전달하려고했습니다 (물론 0이 있음), 음, 프로필에서만 동일한 갈퀴를 전달하려고했습니다. 여기에 내 코드가 있습니다:

...
         m_Trade.Buy(Lots);// 마켓에서 전체 볼륨 구매
         if(m_Trade.ResultRetcode()==10008)//구매가 성공하면 테이크아웃을 설정하여 위치를 변경합니다.
           {
            S="신청이 완료되었습니다. 주문 번호: "+IntegerToString(m_Trade.RequestOrder());
            Comment(S);
            sl=m_Trade.RequestSL();// 마지막 요청에서 손절매 가져오기
            for(int i=0;i<=10;i++)
              {
               if(m_Trade.PositionModify(symbol,sl,Ask+SPS*take_koef[i]))
                 {
                  S+="스냅 테이크: "+IntegerToString(i);
                  Comment(S);
                 }
               else
                 {
                  S+="코드와 함께 SnPosition 변경 오류: "+IntegerToString(m_Trade.ResultRetcode());
                  Comment(S);
                  return(4);
                 };
              };
...

도움을 주셔서 미리 감사드립니다.

[삭제]  
EA 프로그래밍을 시작하는 데 큰 도움이 될 것입니다.
 

MQL5의 객체 지향 프로그래밍에 대한 좋은 입문서입니다.

MT5 빌드 1347에서는 첫 번째 코드 예제가 "잘못된 스위치 표현식 유형" 오류와 함께 컴파일에 실패합니다.

AccountInfo.mqh의 스위치 문에서 int에 형 변환을 추가해야 작동했습니다:

switch((int)MarginMode())

 
Николай Осипов:

안녕하세요,
코드에서 BuyStop 기능을 사용하여 RTS-3.13 (RIH3) 선물을 거래할 때 오류가 계속 발생합니다:
10022 TRADE_RETCODE_INVALID_EXPIRATION - 유효하지 않은 주문 만료 날짜


니콜라스, 안녕하세요. 혹시 이 문제를 해결하셨나요? RTS-6.17에서도 같은 문제가 발생하는데 어떻게 해결해야 할지 모르겠습니다.
 
Rashid Zeynalov:
RTS-3.13 오픈 데모에서 비슷한 문제가 발생하여 모든 것을 시도했습니다 (지정가 주문은 심볼 프로필에 기록된 대로 ORD_TIME_SPECIFIED_DAY로 설정되어 있음) !!!!. 매수-스톱 주문은 수동으로 시장에서 완벽하게 열립니다. 이것은 터미널 결함이므로 개발자에게 편지를 보내야합니다.
라시드, 안녕하세요. 혹시 이 문제를 해결하셨나요? RTS-6.17의 실제 오픈에서 동일한 어려움을 겪고 있습니다.

 
sgtkachev:
라시드, 안녕하세요. 혹시 이 문제를 해결하셨나요? RTS-6.17의 실제 오픈에서 동일한 어려움을 겪고 있습니다.

죄송합니다, 질문을 알아차리지 못했습니다. 이 파일을 교체하고 결과를 보고해 주세요.
파일:
Trade.mqh  68 kb
 

안녕하세요

일부 브로커(예: FoxPro)에서 포지션 오픈 시도 시 10030 오류가 발생합니다. 코드 설명: 유효하지 않은 채우기입니다. 다른 브로커 (예 : Alpari)에서는이 줄없이 작동합니다.

전문가 어드바이저의 초기화 블록에서 코드에 다른 값을 썼습니다:

trade.SetTypeFilling(SYMBOL_FILLING_FOK);

или
trade.SetTypeFilling(SYMBOL_FILLING_IOC);

или

trade.SetTypeFilling(ORDER_FILLING_RETURN);

도움이되지 않습니다. 문제를 해결하는 방법? 아니면이 CTrade 클래스가 오래되었고 최신 터미널 업데이트와 일치하지 않으며 구조를 통해 표준 체계에 따라 거래 작업을 작성해야합니까?


업데이트: 라시드가 위에 라이브러리 파일을 게시하여 문제를 해결했습니다. 표준 라이브러리에 오류가 있다는 것이 안타깝습니다. 이제 모든 것이 작동하도록 라이브러리를 교체하지 않고 EA에서 직접 일부 변경을 할 수 있는지 비교를 연구 할 것입니다.

Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
  • www.metatrader5.com
В платформу встроена система автоматического обновления. Она позволяет своевременно получать и устанавливать новые версии программы. Эту систему...
 
Good
 
makk:

MQL5의 객체 지향 프로그래밍에 대한 좋은 입문서입니다.

MT5 빌드 1347에서는 첫 번째 코드 예제가 "잘못된 스위치 표현식 유형" 오류와 함께 컴파일에 실패합니다.

AccountInfo.mqh의 스위치 문에서 int에 형 변환을 추가해야 작동했습니다:

switch((int)MarginMode())

 

안녕하세요, 매우 유용한 게시물에 감사드리며 이 문제를 해결하도록 도와주세요. MT5를 처음 사용하며 EA를 만드는 방법을 배우고 있어서 샘플 코드를 복사하여 Ctrade.Buy를 실행했지만 백테스트가 실패했습니다. 자세한 내용은 다음과 같습니다:


1) 계좌: 기본 통화가 NZD인 실거래 계좌

2) 백테스트를 위한 메타에디터 설정:

옵션


3) 코드: https://www.mql5.com/ko/articles/481 에서 복사 :


//+------------------------------------------------------------------+

//|                                                         demo.mq5 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#include<Trade\Trade.mqh>


//--- object for performing trade operations

CTrade  trade;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   //--- set MagicNumber for your orders identification

   int MagicNumber=123456;

   trade.SetExpertMagicNumber(MagicNumber);

   //--- set available slippage in points when buying/selling

   int deviation=10;

   trade.SetDeviationInPoints(deviation);

   //--- order execution mode

   trade.SetTypeFilling(ORDER_FILLING_RETURN);

   //--- logging mode: it would be better not to declare this method at all, the class will set the best mode on its own

   trade.LogLevel(1);

   //--- what function is to be used for trading: true - OrderSendAsync(), false - OrderSend()

   trade.SetAsyncMode(true);

   //---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   BuySample1();

  }


//--- Buy sample  

//+------------------------------------------------------------------+

//|  Buying a specified volume at the current symbol                 |

//+------------------------------------------------------------------+

void BuySample1()

  {

//--- 1. example of buying at the current symbol

   if(!trade.Buy(0.1))

     {

      //--- failure message

      Print("Buy() method failed. Return code=",trade.ResultRetcode(),

            ". Code description: ",trade.ResultRetcodeDescription());

     }

   else

     {

      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),

            " (",trade.ResultRetcodeDescription(),")");

     }

//---

  }

4) 오류 로그(EUR/USD로만 테스트 중임을 참고하세요):

GJ 0 19:36:44.410 127.0.0.1 로그인 (빌드 1730)

HH 0 19:36:44.420 네트워크 38520바이트의 계정 정보 로드됨

JO 0 19:36:44.420 네트워크 1482바이트의 테스터 매개변수 로드됨

QE 0 19:36:44.420 네트워크 188바이트의 입력 매개변수 로드됨

FR 0 19:36:44.421 네트워크 443바이트의 심볼 목록 로드됨

IF 0 19:36:44.421 테스터 전문가 파일 추가됨: Experts\demo.ex5. 46684 바이트 로드됨

QH 0 19:36:44.433 테스터 초기 예탁금 10000.00 NZD, 레버리지 1:100

JN 0 19:36:44.437 테스터 초기화 성공

ES 0 19:36:44.437 네트워크 총 초기화 데이터 수신 46Kb

PP 0 19:36:44.437 테스터 인텔 코어 i7-4510U @ 2.00GHz, 8103MB

RJ 0 19:36:44.799 심볼 EURUSD: 동기화할 심볼

HR 0 19:36:44.800 기호 EURUSD: 기호 동기화됨, 3624바이트의 기호 정보 수신됨

NJ 0 19:36:44.800 내역 EURUSD: 내역 동기화 시작됨

GO 0 19:36:44.856 내역 EURUSD: 0:00:00.000에 동기화할 27바이트의 내역 데이터를 로드합니다.

RQ 0 19:36:44.856 내역 EURUSD: 2012.01.01부터 2017.11.15까지 동기화된 내역

EF 0 19:36:44.993 히스토리 EURUSD,Daily: 1010 바에 할당된 히스토리 캐시, 2014.01.01 00:00 ~ 2014.12.31 00:00의 312 바 포함

ND 0 19:36:44.993 내역 EURUSD,일간: 2014.01.01 00:00부터 내역 시작

OL 0 19:36:44.996 테스터 EURUSD,일일 (핼리팩스플러스-라이브): 모든 틱 발생

GN 0 19:36:44.996 Tester EURUSD,Daily: 2015.01.01 00:00부터 2017.11.15 00:00까지 Experts\demo.ex5 테스트 시작

CK 0 19:36:56.288 심볼 NZDUSD: 동기화할 심볼

IS 0 19:36:56.288 기호 NZDUSD: 기호 동기화됨, 3624바이트의 기호 정보 수신됨

JL 0 19:36:56.288 내역 NZDUSD: 내역 동기화 시작됨

HJ 0 19:36:56.575 내역 NZDUSD: 0:00:00.078에 동기화할 14Kb의 내역 데이터 로드 중

LS 0 19:36:56.575 내역 NZDUSD: 2013.01.01부터 2017.11.15까지 동기화된 내역

CO 0 19:36:56.579 심볼 EURNZD: 동기화할 심볼

OJ 0 19:36:56.580 심볼 EURNZD: 심볼 동기화됨, 3624바이트의 심볼 정보 수신됨

DL 0 19:36:56.580 히스토리 EURNZD: 히스토리 동기화 시작됨

MK 0 19:36:56.656 히스토리 EURNZD: 0:00:00.000에 동기화할 27바이트의 히스토리 데이터 로드 중

OD 0 19:36:56.656 히스토리 EURNZD: 2013.01.01부터 2017.11.15까지 동기화된 히스토리

IN 0 19:36:56.665 거래 2015.01.02 03:00:00 시장가 매수 0.10 EURUSD (1.20538 / 1.20549 / 1.20538)

PE 0 19:36:56.665 거래 2015.01.02 03:00:00 거래 #2 1.20549에 0.10 EURUSD 매수 완료(주문 #2기준)

FH 0 19:36:56.666 2015.01.02 03:00:00 거래 체결 [#2 매수 0.10 EURUSD at 1.20549] 완료

OG 0 19:36:56.666 거래 2015.01.02 03:00:00 주문 수행 1.20549에 0.10 매수 [#2 매수 0.10 EURUSD at 1.20549]

FO 0 19:36:56.670 데모 (EURUSD,D1) 2015.01.02 03:00:00 매수() 메서드가 성공적으로 실행되었습니다. 반환 코드=10009 (1.20549에서 완료)

NM 2 19:37:15.823 내역 NZDUSD 2016.09.21 23:01:00: 손상된 내역 감지됨 (s:-73370, o:73433, h:+48, l:-123, c:-117 -- tv:63, rv:11250111)

JF 2 19:37:15.823 내역 NZDUSD 2016.09.21, 불량 컨테이너 발견, 재동기화해야 함

LQ 2 19:37:16.106 정의되지 않은 기능에서 테스터 이력 오류 9 발생

OH 2 19:37:16.106 테스터가 테스트 간격 0%에서 '20 NZDUSD' 오류로 중지됨


무엇이 잘못되었고 어떻게 해결해야 하나요?