기고글 토론 "초보자를 위한 MQL5 Expert Advisor 코드 작성 가이드" - 페이지 29

 
다운로드 파일에 문제가 있으니 수정해 주세요.
 

안녕하세요 여러분,

저는 현재 데모 계정에서 사무엘의 EA를 실행하고 있으며 매우 만족합니다. 좋은 프로그래밍!

때때로 좋은 거래를 보여 주지만 약점이 있습니다:

매도 옵션은 차트 밸리의 전환점에 쌓이고 매수 옵션은 해당 고점에 쌓인 다음 먼저 마이너스로 장부에 크게 부딪칩니다. 저는 이것을 다시 프로그래밍하고 싶습니다. 즉, 낮에는 매수, 정점에는 매도하고 싶지만 지금까지 시도는 실패했습니다. 또한 MQL5에 대한 기초적인 지식만 가지고 있습니다.

누구든지 저를 도울 수 있습니까?

SG와 많은 감사합니다!

 

EA가 수익성 있는 포지션을 취하는 다른 지점도 반전되기 때문에 일반적으로 작동하지 않습니다 .....

그러나 이것을 읽으십시오:

EA-프리랜서 사양 : https://www.mql5.com/ko/articles/4368
인디 : https://www.mql5.com/ko/articles/4304
MQL5 및 MQL4에서 거래 로봇을 주문하는 방법 : https://www.mql5.com/ko/articles/117

힌트를 통해 아이디어를 더 정확하게 지정할 수 있으며, 작동하는지 확인하기 위해 또는 지불 여부에 관계없이 다른 사람에게 요청할 수 있습니다.

So formulieren Sie das Pflichtenheft eines Auftrages für einen Handelsroboter
So formulieren Sie das Pflichtenheft eines Auftrages für einen Handelsroboter
  • www.mql5.com
Handeln Sie nach Ihrer eigenen Strategie? Wenn Sie Ihre Handelsregeln formalisieren und als Algorithmus für ein Programm beschreiben können, wäre es doch besser, Ihren Handel einem automatisierten Expert Advisor anzuvertrauen. Ein Roboter braucht weder Schlaf noch Nahrung und ist keinen menschlichen Schwächen unterworfen. In diesem Artikel zeigen wir Ihnen, wie Sie, um einen Handelsroboter im Freelance-Service in Auftrag zu geben, das sogenannte Pflichtenheft erstellen.
 

안녕하세요 여러분(특히 친애하는 저자)

저는 이 글과 함께 코딩을 했습니다. 나는 그것을 많이 즐겼고 그것으로부터 많은 것을 배웠습니다.

유익한 기사를 작성해 주셔서 감사합니다.

하지만 문제가 있습니다. 내 EA가 주문을하지 않았습니다. 저자의 코드를 다운로드했지만 주문도하지 않았습니다.

기사가 13 년이 지났기 때문에 코드가 이제 구식이라고 가정합니다. 누구든지 저를 도와줄 수 있나요?

내 코드는 아래 파일에 있습니다. 미리 감사드립니다.

파일:
myFirstEA.mq5  25 kb
 

안녕하세요, 저는 초보자라는 것을 경고하고 싶으니 욕을 많이하지 마십시오.)

생성기를 통해 전문가 고문을 만들고 싶었습니다 (모든 것이 괜찮은 것 같지만 하나가 있습니다).

이전 거래가 마감 된 직후가 아니라 예를 들어 하나의 양초 후에 거래를 시작하고 싶습니다,

나는 무언가를 쓰려고했지만 결국 오류가 발생합니다.

누구든지이 문제를 도와 주거나 오류와 해결 방법을 알려줄 수 있습니까?

다음은 실제 코드입니다:


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

//| ParExpert.mq5 ||

//| 저작권 2022, MetaQuotes Ltd.

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

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

#재산권 저작권 "저작권 2022, MetaQuotes Ltd."

#속성 링크"https://www.mql5.com"

#속성 버전 "1.00"

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

//| 포함 |

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

#include <Expert\Expert.mqh>

//--- 사용 가능한 신호

#include <Expert\Signal\SignalSAR.mqh>

//--- 사용 가능한 후행

#include <Expert\Trailing\TrailingFixedPips.mqh>

//--- 사용 가능한 자금 관리

#include <Expert\Money\MoneyFixedLot.mqh>

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

//| 입력 |

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

//--- 전문가 입력

입력 문자열 Expert_Title = "ParExpert"; // 문서 이름

ulong Expert_MagicNumber = 24195; //

bool Expert_EveryTick = false; //

//--- 메인 신호에 대한 입력

입력 int Signal_ThresholdOpen = 10; // 오픈할 신호 임계값 [0...100]

input int Signal_ThresholdClose = 0; // 닫을 신호 임계값 [0...100]

input double Signal_PriceLevel = 0.0; // 거래를 체결할 가격 수준

input double Signal_StopLevel = 500; // 스톱로스 레벨 (포인트 단위)

input double Signal_TakeLevel = 70; // 이익실현 레벨 (포인트)

input int Signal_Expiration = 4; // 지정가 주문 만기 (바 단위)

input double Signal_SAR_Step = 0.02; // 파라볼릭 SAR(0.02,0.2) 속도 증분

input double Signal_SAR_Maximum = 0.2; // 파라볼 릭 SAR(0.02,0.2) 최대 속도

입력 double Signal_SAR_Weight = 0.6; // 파라볼릭 SAR(0.02,0.2) 가중치 [0...1.0]

//--- 트레일링에 대한 입력

input int Trailing_FixedPips_StopLevel = 0; // 스톱로스 트레일링 레벨 (포인트 단위)

input int Trailing_FixedPips_ProfitLevel = 10; // 이익실현 후행 레벨 (포인트)

//--- 돈에 대한 입력

input double Money_FixLot_Percent = 10.0; // 퍼센트

input double Money_FixLot_Lots = 0.1; // 고정 거래량

//--- 거래 쿨다운에 대한 입력

input int Expert_TradeCooldown = 1; // 거래 사이의 쿨다운 기간 (바 단위)

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

//| 글로벌 전문가 객체 |

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

익스퍼트 익스퍼트;

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

//| 전문가 초기화 함수 | //|

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

int OnInit()

{

//--- 전문가 초기화

if (!ExtExpert.Init(Symbol(), Period(), Expert_EveryTick, Expert_MagicNumber))

{

//--- 실패

printf(__FUNCTION__ + ": 전문가 초기화 오류");

ExtExpert.Deinit();

반환 (INIT_FAILED);

}


//--- 신호 생성

CExpertSignal *signal = 새로운 CExpertSignal;

if (signal == NULL)

{

//--- 실패

printf(__FUNCTION__ + ": 신호 생성 오류");

ExtExpert.Deinit();

반환 (INIT_FAILED);

}


//---

ExtExpert.InitSignal(signal);

signal.ThresholdOpen(Signal_ThresholdOpen);

signal.ThresholdClose(Signal_ThresholdClose);

signal.PriceLevel(Signal_PriceLevel);

signal.StopLevel(Signal_StopLevel);

신호.테이크레벨(신호_테이크레벨);

signal.Expiration(Signal_Expiration);


//--- 필터 CSignalSAR 만들기

CSignalSAR *필터0 = 새로운 CSignalSAR;

if (filter0 == NULL)

{

//--- 실패

printf(__FUNCTION__ + ": filter0 생성 중 오류 발생");

ExtExpert.Deinit();

반환 (INIT_FAILED);

}

signal.AddFilter(filter0);


//--- 필터 매개변수 설정

filter0.Step(Signal_SAR_Step);

filter0.Maximum(Signal_SAR_Maximum);

filter0.Weight(Signal_SAR_Weight);


//--- 트레일링 오브젝트 생성

CTrailingFixedPips *trailing = 새로운 CTrailingFixedPips;

if (trailing == NULL)

{

//--- 실패

printf(__FUNCTION__ + ": 후행 생성 오류");

ExtExpert.Deinit();

반환 (INIT_FAILED);

}


//--- 전문가에 후행 추가(자동으로 삭제됨))

if (!ExtExpert.InitTrailing(trailing))

{

//--- 실패

printf(__FUNCTION__ + ": 트레일링 초기화 중 오류 발생");

ExtExpert.Deinit();

반환 (INIT_FAILED);

}


//--- 트레일링 매개변수 설정

trailing.StopLevel(Trailing_FixedPips_StopLevel);

trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);


//--- 머니 객체 생성

CMoneyFixedLot * money = 새로운 CMoneyFixedLot;

if (money == NULL)

{

//--- 실패

printf(__FUNCTION__ + ": 화폐 생성 오류");

ExtExpert.Deinit();

반환 (INIT_FAILED);

}


//--- 전문가에 돈 추가(자동으로 삭제됨))

if (!ExtExpert.InitMoney(money))

{

//--- 실패

printf(__FUNCTION__ + ": 화폐를 초기화하는 중 오류 발생");

ExtExpert.Deinit();

반환 (INIT_FAILED);

}


//--- 화폐 매개변수 설정

돈.퍼센트(돈_픽스롯_퍼센트);

money.Lots(Money_FixLot_Lots);


//--- 모든 트레이딩 객체 파라미터 확인

if (!ExtExpert.ValidationSettings())

{

//--- 실패

ExtExpert.Deinit();

반환 (INIT_FAILED);

}


//--- 필요한 모든 인디케이터 조정

if (!ExtExpert.InitIndicators())

{

//--- 실패

printf(__FUNCTION__ + ": 인디케이터 초기화 오류");

ExtExpert.Deinit();

반환 (INIT_FAILED);

}


//--- 마지막 거래 시간 변수 초기화

datetime lastTradeTime = 0;

ExtExpert.SetVariable("LastTradeTime", lastTradeTime);


//--- ok

반환 (INIT_SUCCEED);

}

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

//| 전문가의 초기화 함수 ||

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

void OnDeinit(const int reason)

{

ExtExpert.Deinit();

}

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

//| "Tick" 이벤트 핸들러 함수 ||

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

void OnTick()

{

//--- 마지막 거래 이후 시간 확인

datetime lastTradeTime = ExtExpert.GetVariable("LastTradeTime");

int cooldownBars = Bars - ExtExpert.GetBarShiftByTime(Symbol(), Period(), lastTradeTime);


if (cooldownBars < Expert_TradeCooldown)

{

//--- 거래 쿨다운 기간이 경과하지 않음, 새 거래 개설 건너뛰기

반환합니다;

}


ExtExpert.OnTrade();

}

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

//| "거래" 이벤트 핸들러 함수 ||

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

void OnTrade()

{

ExtExpert.OnTrade();

}

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

//| "타이머" 이벤트 핸들러 함수 ||

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

void OnTimer()

{

ExtExpert.OnTimer();

}

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

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2023.05.27
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
Joosy #:

안녕하세요 여러분😊

@Mario31415927

이는 시세에서 새로운 기간 또는 새로운 막대(무엇이든)가 나타날 때마다 변수가 달라지기 때문입니다:

는 포지션이 이미 열려 있는지 여부에 관계없이 초기화됩니다.

이는 코드에서 비교적 빠르게 확인할 수 있습니다.

그러나 이것이 의도된 것인지, 의도된 것이라면 어떻게 모든 포지션이 다시 마감되는지에 대한 의문이 생깁니다.

이 문맥에서 TRADE_ACTION_DEAL 주문 유형을 이해하지 못한 것일까요?

트레이딩 주문 프로세스는 트레이딩 클래스 Trade에 간단히 적용할 수도 있습니다. 예를 들어

안부 인사:-)

읽기: https://www.mql5.com/ko/articles/232

주문, 포지션 및 거래 간의 차이점과 관계를 설명합니다. 후자는 브로커 측의 예약 프로세스를 반영합니다.

Handelsereignisse in MetaTrader 5
Handelsereignisse in MetaTrader 5
  • www.mql5.com
Eine Überwachung des aktuellen Status eines Handels-Account bedeutet offene Positions und Order kontrollieren zu können. Bevor ein Handelssignal zu einem Abschluss wird, sollte es vom Client-Terminal als Anfrage zum Handels-Server geschickt werden, wo es in eine Order-Warteschlange gestellt wird und auf seine Bearbeitung wartet. Eine Anfrage vom Handels-Server annehmen, sie löschen, wenn sie abläuft oder auf ihrer Grundlage einen Abschluss ausführen - alle diese Handlungen haben Handelsereignisse zur Folge, und der Handels-Server informiert das Terminal entsprechend darüber.
 
Carl Schreiber #:

읽기: https://www.mql5.com/ko/articles/232

이는 주문, 포지션, 거래 간의 차이점과 관계를 설명합니다. 후자는 브로커 측의 예약 프로세스를 반영합니다.

안녕하세요 칼,

팁 주셔서 감사합니다!

하지만 제 자신을 바로 잡아야 합니다.

변수가 새로운 기간마다 재설정되는 것은 사실입니다:

   bool Buy_opened = false, Sell_opened = false; // 변수에 오픈 포지션의 결과를 저장합니다.

그러나 그에 따라 포지션이 있으면 다시 설정됩니다.

   if(PositionSelect(_Symbol) == true) { // 오픈 포지션이 있습니다.

      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) {

         Buy_opened = true;  //매수입니다.

      }

      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) {

         Sell_opened = true; // 판매입니다.

      }

   }

그러나 매수(POSITION_TYPE_BUY)는 올바르게 조회되지만 매도(POSITION_TYPE_SELL)는 조회되지 않는 현상을 경험하고 있습니다. 변수가 더 이상 설정되지 않았나요?

코드를 단계별로 디버깅해야 합니다. 이것은 논리적 오류일 수 있습니다 😉.

Einen Expert Advisor mit Hilfe des MQL5 Objekt-orientierten Programmieransatzes schreiben
Einen Expert Advisor mit Hilfe des MQL5 Objekt-orientierten Programmieransatzes schreiben
  • www.mql5.com
Dieser Beitrag beschäftigt sich mit dem Objekt-orientierten Ansatz, um das zu machen, was wir bereits im Artikel "Schrittweiser Leitfaden zum Schreiben eines Expert Advisors in MQL5 für Anfänger" getan haben - einen einfachen Expert Advisor erstellen. Die meisten Menschen glauben, das sei schwer, doch ich darf Ihnen versichern: wenn Sie diesen Beitrag gelesen haben, dann können Sie Ihren eigenen Objekt-orientierten Expert Advisor schreiben.
 
Joosy #:
Sell_opened = true; // 판매입니다.

이런, 오늘 정말 정신이 없네요.

한 번만 쿼리됩니다. 그게 오류입니다;-)

모든 포지션은 다음과 같이 검색해야 합니다;

   bool Buy_opened = false, Sell_opened = false; // 변수에 오픈 포지션의 결과를 저장합니다.
   
   for(int i=0; i < PositionsTotal(); i++) {
      ticket = PositionGetTicket(i);
      if(PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == EA_Magic) {
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { 
            Buy_opened = true; 
         }
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { 
            Sell_opened = true; 
         }
      }   
   }
 

실제로 웹 파일에 오류가 있었던 것 같습니다.

내용을 바탕으로 제가 직접 다시 작성해서 업로드했습니다. 제가 처음이라서 자세한 내용이 있는지 모르겠습니다. 도움이 되었으면 좋겠습니다.

파일:
my_first_ea.mq5  12 kb
 

테스터 - "지원되지 않는 충전 모드"

3개의 다른 브로커에서 시도했습니다. 무엇이 문제인가요?