효과적인 조언자 쓰기 - 페이지 6

 
Vladimir Baskakov # :
나 없이는 0이 될 것이라는 것을 이미 알고 있습니다. 그렇지 않다면 이 분기를 만들지 않을 것입니다.

그리고 다른 이유는 무엇입니까?

요컨대, 나는 이 공허한 잡담에 질렸다. 당신은 고문의 주제 밖에서 대화를 할 것이고, 나는 당신의 게시물을 무시할 것입니다.

당신의 예측은 이미 거래 로봇의 효율성과 모순되기 때문에 흥미롭지 않습니다. 내 비디오는 추세선을 관리하여 이익을 얻는 방법을 보여줍니다. 배우지 못하면 사용할 수 없습니다. 악기를 연주하는 것과 같습니다. 나는 마스터로서 도구가 좋다고 말합니다. 저는 15년 넘게 외환 프로그래밍을 해왔기 때문에 이것을 압니다. 나는 당신에게 도구를 주었다. 능숙하게 사용할 수 있다는 사실이 아닙니다.

그리고 한 가지 더, 제가 영상에서 사용한 도구는 레이가 아니라 추세선이라고 합니다. 빔은 이 도구의 PARAMETER이며 마음대로 끌 수 있습니다.

이 점에. 더 이상 근거 없는 예측을 건드리고 싶지 않습니다.

 
Vitaly Murlenko # :

그리고 다른 이유는 무엇입니까?

요컨대, 나는 이 공허한 수다에 지쳤습니다. 당신은 고문의 주제 밖에서 대화를 할 것이고, 나는 당신의 게시물을 무시할 것입니다.

당신의 예측은 이미 거래 로봇의 효율성과 모순되기 때문에 흥미롭지 않습니다. 내 비디오는 추세선을 관리하여 이익을 얻는 방법을 보여줍니다. 배우지 못하면 사용할 수 없습니다. 악기를 연주하는 것과 같습니다. 나는 마스터로서 도구가 좋다고 말합니다. 저는 15년 이상 외환 프로그래밍을 해왔기 때문에 이것을 압니다. 나는 당신에게 도구를 주었다. 능숙하게 사용할 수 있다는 사실이 아닙니다.

그리고 한 가지 더, 제가 영상에서 사용한 도구는 레이가 아니라 추세선이라고 합니다. 빔은 이 도구의 PARAMETER이며 마음대로 끌 수 있습니다.

이 점에. 더 이상 근거 없는 예측을 하고 싶지 않습니다.

어디 상태?
빨간색 촛불과 파란색 촛불의 수를 비교하는 것은 추세 정의가 아닙니다.
 
Vladimir Baskakov # :
어디 상태?
빨간색 촛불과 파란색 촛불의 수를 비교하는 것은 추세 정의가 아닙니다.

좋아요, 하지만 보여주겠지만 실제 "전투" 조건에서 중간 결과입니다. 다음은 스크린샷입니다.

어제 15시에 입금되었습니다. 0이 있었습니다(여기서 제 말을 받아들여야 합니다).

상태는 다음과 같습니다.

여덟

아홉

십

열하나

 
이 상태가 분석에 도움이 될까요?
 
Vitaly Murlenko # :
이 상태가 분석에 도움이 될까요?
여기 상태입니다.
그건 그렇고, 왜 추세를 찾는 데 귀찮게.
 
Vitaly Murlenko # :

포스트에는 Expert Advisor(파일 Binarnic_1.0.mq4)와 동영상에서 사용한 스크립트(파일 Script_0.mq4)가 첨부되어 있습니다.

혼란을 피하기 위해 먼저 비디오를 시청하십시오. 나는 헤드폰으로 내 비디오를 보았고 모든 것이 소리에 잘 맞는 것 같습니다.

유튜브에 올리고 싶었는데 구글에서 보안이 너무 까다로워서 휴대폰으로도 알아낼 수 없었습니다. 한마디로 클라우드의 메일루에 영상을 올렸습니다. 이 서버의 뷰어는 분명히 품질 문제가 있으므로 다운로드하십시오. 파일 형식은 mp4입니다. 파일 크기는 252MB입니다. 다운로드 링크는 다음과 같습니다. https://cloud.mail.ru/public/Ewoq/ymNxHFJ2Z

모두 좋은 아침이고 좋은 분위기입니다!

Vitaliy, 어드바이저 코드를 MT4 전용으로 작성할 계획입니까, 아니면 MT5용 버전이 있습니까? 저는 MQL5 프로그래밍 언어로 소규모 독학 과정을 수강했기 때문에 네 가지에 익숙하지 않으므로 귀하의 조언자의 코드에 아무것도 추가할 수 없습니다. 불쌍해!

안부 인사를 전합니다. 블라디미르.

 
MrBrooklin # :

모두 좋은 아침이고 좋은 분위기입니다!

Vitaliy, 어드바이저 코드를 MT4 전용으로 작성할 계획입니까, 아니면 MT5용 버전이 있습니까? 저는 MQL5 프로그래밍 언어로 소규모 독학 과정을 수강했기 때문에 네 가지에 익숙하지 않으므로 귀하의 조언자의 코드에 아무것도 추가할 수 없습니다. 불쌍해!

안부 인사를 전합니다. 블라디미르.

MQL4는 MQL5와 다르지 않습니다. 차이점은 데이터 액세스 및 거래 기능에만 있습니다. 이 모든 것이 공통 가상 인터페이스가 있는 클래스로 "래핑"되어 있습니다. 짜잔, 우리는 어디에서나 변경 없이 컴파일되는 이식 가능한 코드를 얻습니다.

 
Georgiy Merts # :

MQL4는 MQL5와 다르지 않습니다. 차이점은 데이터 액세스 및 거래 기능에만 있습니다. 이 모든 것이 공통 가상 인터페이스가 있는 클래스로 "래핑"되어 있습니다. 짜잔, 우리는 어디에서나 변경 없이 컴파일되는 이식 가능한 코드를 얻습니다.

https://www.mql5.com/ru/docs/basis/preprosessor/conditional_compilation
 
Georgiy Merts # :

차이점은 데이터 액세스 및 거래 기능에만 있습니다.


뿐만 아니라.

 

정확히.

조건부 컴파일 지시어의 도움으로. 이 모든 지시문은 실제 클래스 내에서 작동합니다. 거래 행동을 위한 가상 범용 인터페이스를 작성하고 구현 클래스에서 조건부 컴파일을 사용하여 MQL4-MQL5 분기를 분리합니다. 그런 다음 액세스할 가상 인터페이스를 사용하여 거래할 개체를 생성하기만 하면 됩니다. 그리고 플랫폼 간의 차이점을 잊어버리십시오.

여기에 내 거래 프로세서 가상 인터페이스가 있다고 가정해 보겠습니다.

 // СTradeProcessorI - интерфейс торгового процессора

#include <MyLib\Common\MyObject.mqh>
#include <MyLib\Common\CurSymEnum.mq5>

class CTradePosComponentI;
class COrderInfoCore;

class CTradeProcessorI : public CMyObject
{
public :
   void CTradeProcessorI() {    SetMyObjectType(MOT_TRADE_PROCESSOR_I); };
   virtual void ~CTradeProcessorI() {};
   
   // Настроечный интерфейс
   virtual void SetSlippage( uint uiSlippage) = 0 ;
   
   // Торговый интерфейс
   // Все функции возвращают код возврата торгового сервера
   virtual int Buy( long & lTicket,ECurrencySymbol csSymbol, double dVolume, double dTP= 0 , double dSL= 0 , ulong ulMagic = 0 , string strComment = NULL ) = 0 ;               // Всегда по цене Ask, если успешно - возвращается lTicket
   virtual int Sell( long & lTicket,ECurrencySymbol csSymbol, double dVolume, double dTP= 0 , double dSL= 0 , ulong ulMagic = 0 , string strComment = NULL ) = 0 ;               // Всегда по цене Bid, если успешно - возвращается lTicket  

   virtual int ModifyTPSL(CTradePosComponentI* ptpcComponent, double dTP= 0 , double dSL= 0 ) = 0 ;       
   virtual int ModifyTPSL( long lTPCTicket, double dTP= 0 , double dSL= 0 ) = 0 ;       

   virtual int CloseTradeComponent(CTradePosComponentI* ptpcComponent, double dCloseVolume= EMPTY_VALUE ) = 0 ;               // dCloseVolume - закрываемый объем. Если равен EMPTY_VALUE или равен или больше, чем объем торговой компоненты с указанным тикетом - закрывается вся торговая компонента.   
   virtual int CloseTradeComponent( long lTPCTicket, double dCloseVolume= EMPTY_VALUE ) = 0 ;               // dCloseVolume - закрываемый объем. Если равен EMPTY_VALUE или равен или больше, чем объем торговой компоненты с указанным тикетом - закрывается вся торговая компонента.   
   
   virtual int PendingSet( long & lTicket,ECurrencySymbol csSymbol, ENUM_ORDER_TYPE otOrderType, double dSetPrice, double dVolume, double dTP= 0 , double dSL= 0 , ulong ulMagic = 0 , string strComment = NULL ) = 0 ; // если успешно - возвращается lTicket
   virtual int PendingDelete( long lTicket) = 0 ; 
   virtual int PendingDelete(COrderInfoCore* poiOrder) = 0 ; 
   
   virtual int PendingModify( long lTicket, double dSetPrice, double dTP= 0 , double dSL= 0 ) = 0 ;       
   virtual int PendingModify(COrderInfoCore* poiOrder, double dSetPrice, double dTP= 0 , double dSL= 0 ) = 0 ;       
   
   // Проверка кода возврата
   virtual bool TradeOperationWasSuccessful( int iTradeResCode) const = 0 ;
   
   // Если функция возвращает true, то при возникновении пользовательских ошибок (iTradeResCode > ERR_USER_ERROR_FIRST) советник прекратит работу
   // В случае false - работа будет продолжена
   virtual bool IsUserErrorsFalal() const = 0 ; 

};


모든 기능은 가상이며 완전히 플랫폼 독립적입니다. 플랫폼 독립적인 "거래 구성 요소" 개념이 도입되었으며, 이는 별도의 MT4 주문 또는 MT5의 심볼에 대한 열린 위치를 나타냅니다. 그리고 작업은 바로 그러한 거래 구성 요소로 이루어집니다.

이 인터페이스를 구현하는 실제 클래스는 다음과 같습니다.

 // СTradeProcessor - переносимый класс торгового процессора
// Именно этот класс необходимо использовать для торговли. 
// Класс реализует интерфейс CTradeProcessorI

#ifdef __MQL5__
#include <MyLib\Trade\MT5TradeProcessor.mq5>
#else // __MQL5__
#include <MyLib\Trade\MT4TradeProcessor.mq5>
#endif //__MQL5__

#ifdef __MQL5__
class CTradeProcessor : public CMT5TradeProcessor
#else // __MQL5__
class CTradeProcessor : public CMT4TradeProcessor
#endif //__MQL5__

{
public :
   void CTradeProcessor( uint uiSlippage = DEFAULT_TRADE_POINT_SLIPPAGE);
   void ~CTradeProcessor() {};
};


실제로 전체 구현은 플랫폼별 클래스 CMT5TradeProcessor 및 CMT4TradeProcessor 내에서 발생합니다.