Expert Advisors 구현에 대한 논의. - 페이지 5

 
Ivan_Invanov :
여기 에서 언어의 구문을 공부했습니다. 나는 디자이너의 예에서 배웁니다. 수업 호출이 보입니다. 그런 다음 논리가 무너졌습니다. 어떻게 해야 하나요? 기사를 찾고 계십니까? 표준 도구를 구현하거나 자체 클래스를 작성하는 것이 더 낫습니까?
디자이너를 설명하는 기사를 찾았습니다. 예를 들어 신호 블록의 작동에 대한 설명입니다. 그리고 예와 같은 몇 가지 건조한 문구가 있습니다. 이 매개 변수는 고정되어 있습니다. 그리고 변경하기 위해 아무 것도 기록되지 않습니다. 여기에 그런 질문이 있습니다. 매개변수가 필요하지 않으면 그냥 삭제할 수 있나요? 초기화 중인데 거기서도 삭제되나요? 추가할 수 있는 다른 옵션과 방법은 무엇입니까? 변화의 예를 보면 알 수 있었다. 순전히 참고 자료의 문제라고 생각합니다. 세부 사항이 충분하지 않고 예가 충분하지 않으며 시스템 인식에 대한 일반화가 충분하지 않습니다. 제가 정말 바보인지도 모르겠습니다. 저만을 위한 것인지 궁금합니다. 아니면 튜토리얼을 개선해야 합니까? 예를 들어 개인적으로 돈을 지불할 준비가 되어 있습니다.
 
Ivan_Invanov :

MQL5 - 문서에 대한 가장 자세한 설명이 있는 리소스입니다. 기사, 포럼 및 CodeBase에 있는 방대한 정보 계층. 모든 것이 이렇게 자세하게 씹히는 곳은 세계 어디에서도 찾을 수 없습니다.

당신이 필요로하는 것은 모든 것을 알아낼 의지입니다.

 
Vladimir Karputov :

MQL5 - 문서에 대한 가장 자세한 설명이 있는 리소스입니다. 기사, 포럼 및 CodeBase에 있는 방대한 정보 계층. 모든 것이 이렇게 자세하게 씹히는 곳은 세계 어디에서도 찾을 수 없습니다.

모든 것을 이해하려는 열망만 있으면 됩니다.

여기에 구체적인 질문이 있습니다. CExpertSignal 이 있고 AddFilter가 있으며 AddFilter 기능에 대한 도움말에는 아무 것도 작성되어 있지 않습니다. 예를 들어 확산이 있습니다. 예제가 없으면 어떻게 작성해야 하나요? 정확히 무엇을 해야 합니까? 이제 추측해 보겠습니다.

CExpert ExtExpert;
ExtExpert.InitSignal(signal);
signal.AddFilter(filter0);
filer0.Spread( 20 );

오류 없는 컴파일. 제가 제대로 썼나요? 이제 스프레드가 20 이상이면 거래가 체결되지 않습니까? 그리고 이런 경우 어떻게 해야 할까요? 무엇을 읽을 수 있습니까?

 
Ivan_Invanov :

여기에 구체적인 질문이 있습니다. CExpertSignal이 있고 AddFilter가 있으며 AddFilter 기능에 대한 도움말에는 아무 것도 작성되어 있지 않습니다. 예를 들어 확산이 있습니다. 예제가 없으면 어떻게 작성해야 하나요? 정확히 무엇을 해야 합니까? 이제 추측해 보겠습니다.

오류 없는 컴파일. 제가 제대로 썼나요? 이제 스프레드가 20 이상이면 거래가 체결되지 않습니까? 그리고 이런 경우 어떻게 해야 할까요? 무엇을 읽을 수 있습니까?

읽기: MQL4/MQL5 마법사

연습:

  • 마법사를 사용하여 간단한 Expert Advisor 만들기
  • MetaEditor에서 결과 코드 열기
그런 다음 질문하십시오.
Мастер MQL4/MQL5 - Справка по MetaEditor
Мастер MQL4/MQL5 - Справка по MetaEditor
  • www.metatrader5.com
Благодаря Мастеру MQL4/MQL5, трейдер может создать советника, не обладая знаниями в области программирования. Все что нужно сделать — это выбрать торговые сигналы, которые будет использовать советник, алгоритм мани-менеджмента и трейлинг-стопа. Код советника будет сгенерирован автоматически на основе выбранных параметров. Помимо этого, Мастер...
 
Ivan_Invanov :

여기에 구체적인 질문이 있습니다. CExpertSignal이 있고 AddFilter가 있으며 AddFilter 기능에 대한 도움말에는 아무 것도 작성되어 있지 않습니다. 예를 들어 확산이 있습니다. 예제가 없으면 어떻게 작성해야 하나요? 정확히 무엇을 해야 합니까? 이제 추측해 보겠습니다.

오류 없는 컴파일. 제가 제대로 썼나요? 이제 스프레드가 20 이상이면 거래가 체결되지 않습니까? 그리고 이런 경우 어떻게 해야 할까요? 무엇을 읽을 수 있습니까?

기초지식이 없는 상태에서 바로 성인물을 쓰기 시작하려는 시도가 있는 것 같습니다. 글쎄, 그런 일은 일어나지 않는다. 먼저 알파벳을 배우고 블록체로 글을 쓰다 보니 서서히 작곡에 익숙해지고 재능이 필요합니다. 그래서 여기에서는 기본 지식 없이 자동으로 생성된 코드를 알아내려고 ... 벽에 머리를 박는 가장 좋은 방법은 아닙니다.

 
//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalMA.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedRisk.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string              Expert_Title         = "1" ;         // Document name
ulong                     Expert_MagicNumber   = 15825 ;       //
bool                      Expert_EveryTick     = false ;       //
//--- inputs for main signal
input int                 Signal_ThresholdOpen = 10 ;           // Signal threshold value to open [0...100]
input int                 Signal_ThresholdClose= 10 ;           // Signal threshold value to close [0...100]
input double              Signal_PriceLevel    = 0.0 ;         // Price level to execute a deal
input double              Signal_StopLevel     = 50.0 ;         // Stop Loss level (in points)
input double              Signal_TakeLevel     = 50.0 ;         // Take Profit level (in points)
input int                 Signal_Expiration    = 4 ;           // Expiration of pending orders (in bars)
input int                 Signal_MA_PeriodMA   = 12 ;           // Moving Average(12,0,...) Period of averaging
input int                 Signal_MA_Shift      = 0 ;           // Moving Average(12,0,...) Time shift
input ENUM_MA_METHOD      Signal_MA_Method     = MODE_SMA ;     // Moving Average(12,0,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_MA_Applied    = PRICE_CLOSE ; // Moving Average(12,0,...) Prices series
input double              Signal_MA_Weight     = 1.0 ;         // Moving Average(12,0,...) Weight [0...1.0]
//--- inputs for money
input double              Money_FixRisk_Percent= 10.0 ;         // Risk percentage
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- Initializing expert
   if (!ExtExpert.Init( Symbol (), Period (),Expert_EveryTick,Expert_MagicNumber))
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing expert" );
      ExtExpert.Deinit();
       return ( INIT_FAILED );
     }
//--- Creating signal
   CExpertSignal *signal= new CExpertSignal;
   if (signal== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating signal" );
      ExtExpert.Deinit();
       return ( INIT_FAILED );
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalMA
   CSignalMA *filter0= new CSignalMA;
   if (filter0== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating filter0" );
      ExtExpert.Deinit();
       return ( INIT_FAILED );
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodMA(Signal_MA_PeriodMA);
   filter0.Shift(Signal_MA_Shift);
   filter0.Method(Signal_MA_Method);
   filter0.Applied(Signal_MA_Applied);
   filter0.Weight(Signal_MA_Weight);
//--- Creation of trailing object
   CTrailingNone *trailing= new CTrailingNone;
   if (trailing== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating trailing" );
      ExtExpert.Deinit();
       return ( INIT_FAILED );
     }
//--- Add trailing to expert (will be deleted automatically))
   if (!ExtExpert.InitTrailing(trailing))
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing trailing" );
      ExtExpert.Deinit();
       return ( INIT_FAILED );
     }
//--- Set trailing parameters
//--- Creation of money object
   CMoneyFixedRisk *money= new CMoneyFixedRisk;
   if (money== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating money" );
      ExtExpert.Deinit();
       return ( INIT_FAILED );
     }
//--- Add money to expert (will be deleted automatically))
   if (!ExtExpert.InitMoney(money))
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing money" );
      ExtExpert.Deinit();
       return ( INIT_FAILED );
     }
//--- Set money parameters
   money.Percent(Money_FixRisk_Percent);
//--- Check all trading objects parameters
   if (!ExtExpert.ValidationSettings())
     {
       //--- failed
      ExtExpert.Deinit();
       return ( INIT_FAILED );
     }
//--- Tuning of all necessary indicators
   if (!ExtExpert.InitIndicators())
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing indicators" );
      ExtExpert.Deinit();
       return ( INIT_FAILED );
     }
//--- ok
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick ()
  {
   ExtExpert. OnTick ();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade ()
  {
   ExtExpert. OnTrade ();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   ExtExpert. OnTimer ();
  }
//+------------------------------------------------------------------+
안녕하세요. 이 고문 의 시장 진입 신호는 무엇이며 코드의 어디에 있습니까?
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
시장에 진입 하라는 신호는 '필터'에 있는 것 맞죠?
 
왜 다른 클래스 선언인가? 때로는 스택 메모리가 있고 때로는 그렇지 않은 이유는 무엇입니까? 별표가 있든 없든?
 
확산 필터가 필요하고 여기에서 수행되는 작업을 이해합니다. 가격이 평균보다 약간 높으면 거래가 성사되는 전략이라는 것을 제가 올바르게 이해하고 있었습니까?
 
Ivan_Invanov :
안녕하세요. 이 고문 의 시장 진입 신호는 무엇이며 코드의 어디에 있습니까?

이러한 문제를 해결하려면 디버거를 사용해야 합니다.

틱이 도착하면 OnTick() 함수가 호출됩니다. 모든 처리는 필요한 경우 신호가 감지되고 필요한 경우 거래 작업이 수행됩니다.

보시다시피 이 함수에서 ExtExpert 함수가 호출됩니다. OnTick () 및 모든 것이 그 내부에서 발생하며 코드에는 다른 것이 없습니다.

따라서 중단점을 설정하고 디버거에서 Expert Advisor를 시작합니다. 첫 번째 틱이 오자마자 중단점이 트리거되고 이 지점에서 코드에서 멈춥니다. 그런 다음 코드 내에서 단계별로 이동하여 수행되는 이유와 작업을 이해합니다.