Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
나 자신은 이미 프로그래밍이 내 것이 아니라는 것을 깨달았지만 MQL5 Master와 친구가 되었습니다. 그러나 거래 신호의 일부 모듈을 컴파일할 때 경고가 나타납니다. 이러한 경고가 얼마나 중요한지, 그리고 어렵지 않다면 그림에 표시된 경고를 제거하기 위해 거래 신호 모듈의 코드에서 수정해야 할 사항을 알려주십시오.
안부 인사를 전합니다. 블라디미르.
거래 신호 모듈 코드
//+------------------------------------------------------------------+//| SampleSignal.mqh |//| Copyright 2010, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2010, MetaQuotes Software Corp."#property link"http://www.mql5.com"//+------------------------------------------------------------------+//| включаемые файлы |//+------------------------------------------------------------------+#include <Expert\ExpertSignal.mqh>
// wizard description start//+------------------------------------------------------------------+//| Description of the class |//| Title=Сигнал по пересечению ценой скользящей средней |//| со входом на последующем откате |//| Type=SignalAdvanced |//| Name=Sample |//| Class=CSampleSignal |//| Page= |//| Parameter=PeriodMA,int,12 |//| Parameter=ShiftMA,int,6 |//| Parameter=MethodMA,ENUM_MA_METHOD,MODE_EMA |//| Parameter=AppliedMA,ENUM_APPLIED_PRICE,PRICE_CLOSE |//| Parameter=Limit,double,0.0 |//| Parameter=StopLoss,double,50.0 |//| Parameter=TakeProfit,double,50.0 |//| Parameter=Expiration,int,10 |//+------------------------------------------------------------------+// wizard description end//+------------------------------------------------------------------+//| Класс CSampleSignal. |//| Назначение: Класс генератора торговых сигналов по пересечению |//| ценой скользящей средней |//| со входом на последующем откате. |//| Является производным от класса CExpertSignal. |//+------------------------------------------------------------------+class CSampleSignal : public CExpertSignal
{
protected :
CiMA m_MA; // объект для доступа к значениям скользящей средней
CiOpen m_open; // объект для доступа к ценам открытия баров
CiClose m_close; // объект для доступа к ценам закрытия баров//--- параметры настройкиint m_period_ma; // период усреднения средней скользящейint m_shift_ma; // смещение средней скользящей по оси времениENUM_MA_METHOD m_method_ma; // метод усреднения средней скользящейENUM_APPLIED_PRICE m_applied_ma; // объект усреднения средней скользящейdouble m_limit; // уровень установки отложенного ордера относительно средней скользящейdouble m_stop_loss; // уровень установки ордера "stop loss" относительно цены открытияdouble m_take_profit; // уровень установки ордера "take profit" относительно цены открытияint m_expiration; // время "жизни" отложенного ордера в барахpublic :
CSampleSignal();
//--- методы установки параметров настройкиvoid PeriodMA( int value) { m_period_ma=value; }
void ShiftMA( int value) { m_shift_ma=value; }
void MethodMA( ENUM_MA_METHOD value) { m_method_ma=value; }
void AppliedMA( ENUM_APPLIED_PRICE value) { m_applied_ma=value; }
void Limit( double value) { m_limit=value; }
void StopLoss( double value) { m_stop_loss=value; }
void TakeProfit( double value) { m_take_profit=value; }
void Expiration( int value) { m_expiration=value; }
//--- метод проверки параметров настройкиvirtualbool ValidationSettings();
//--- метод проверки параметров настройкиvirtualbool InitIndicators(CIndicators* indicators);
//--- методы генерации сигналов входа в рынокvirtualbool CheckOpenLong( double & price, double & sl, double & tp, datetime & expiration);
virtualbool CheckOpenShort( double & price, double & sl, double & tp, datetime & expiration);
//--- методы генерации сигналов модификации отложенных ордеровvirtualbool CheckTrailingOrderLong(COrderInfo* order, double & price);
virtualbool CheckTrailingOrderShort(COrderInfo* order, double & price);
protected :
//--- метод инициализации объектовbool InitMA(CIndicators* indicators);
bool InitOpen(CIndicators* indicators);
bool InitClose(CIndicators* indicators);
//--- методы доступа к данным объектовdouble MA( int index) { return (m_MA.Main(index)); }
double Open( int index) { return (m_open.GetData(index)); }
double Close( int index) { return (m_close.GetData(index)); }
};
//+------------------------------------------------------------------+//| Конструктор CSampleSignal. |//| INPUT: нет. |//| OUTPUT: нет. |//| REMARK: нет. |//+------------------------------------------------------------------+void CSampleSignal::CSampleSignal()
{
//--- установка значений по-умолчанию
m_period_ma = 12 ;
m_shift_ma = 6 ;
m_method_ma = MODE_EMA ;
m_applied_ma = PRICE_CLOSE ;
m_limit = 0.0 ;
m_stop_loss = 50.0 ;
m_take_profit= 50.0 ;
m_expiration = 10 ;
}
//+------------------------------------------------------------------+//| Проверка параметров настройки. |//| INPUT: нет. |//| OUTPUT: true-если настройки правильные, иначе false. |//| REMARK: нет. |//+------------------------------------------------------------------+bool CSampleSignal::ValidationSettings()
{
//--- проверка параметровif (m_period_ma<= 0 )
{
printf ( __FUNCTION__ + ": период скользящей средней должен быть больше нуля" );
return ( false );
}
//--- успешное завершениеreturn ( true );
}
//+------------------------------------------------------------------+//| Инициализация индикаторов и таймсерий. |//| INPUT: indicators - указатель на объект-коллекцию |//| индикаторов и таймсерий. |//| OUTPUT: true-в случае успешного завершения, иначе false. |//| REMARK: нет. |//+------------------------------------------------------------------+bool CSampleSignal::InitIndicators(CIndicators* indicators)
{
//--- проверка указателяif (indicators== NULL ) return ( false );
//--- инициализация скользящей среднейif (!InitMA(indicators)) return ( false );
//--- инициализация таймсерии цен открытияif (!InitOpen(indicators)) return ( false );
//--- инициализация таймсерии цен закрытияif (!InitClose(indicators)) return ( false );
//--- успешное завершениеreturn ( true );
}
//+------------------------------------------------------------------+//| Инициализация скользящей средней. |//| INPUT: indicators - указатель на объект-коллекцию |//| индикаторов и таймсерий. |//| OUTPUT: true-в случае успешного завершения, иначе false. |//| REMARK: нет. |//+------------------------------------------------------------------+bool CSampleSignal::InitMA(CIndicators* indicators)
{
//--- инициализация объекта скользящей среднейif (!m_MA.Create(m_symbol.Name(),m_period,m_period_ma,m_shift_ma,m_method_ma,m_applied_ma))
{
printf ( __FUNCTION__ + ": ошибка инициализации объекта" );
return ( false );
}
m_MA.BufferResize( 3 +m_shift_ma);
//--- добавление объекта в коллекциюif (!indicators.Add( GetPointer (m_MA)))
{
printf ( __FUNCTION__ + ": ошибка добавления объекта" );
return ( false );
}
//--- успешное завершениеreturn ( true );
}
//+------------------------------------------------------------------+//| Инициализация таймсерии цен открытия. |//| INPUT: indicators - указатель на объект-коллекцию |//| индикаторов и таймсерий. |//| OUTPUT: true-в случае успешного завершения, иначе false. |//| REMARK: нет. |//+------------------------------------------------------------------+bool CSampleSignal::InitOpen(CIndicators* indicators)
{
//--- инициализация объекта таймсерииif (!m_open.Create(m_symbol.Name(),m_period))
{
printf ( __FUNCTION__ + ": ошибка инициализации объекта" );
return ( false );
}
//--- добавление объекта в коллекциюif (!indicators.Add( GetPointer (m_open)))
{
printf ( __FUNCTION__ + ": ошибка добавления объекта" );
return ( false );
}
//--- успешное завершениеreturn ( true );
}
//+------------------------------------------------------------------+//| Инициализация таймсерии цен закрытия. |//| INPUT: indicators - указатель на объект-коллекцию |//| индикаторов и таймсерий. |//| OUTPUT: true-в случае успешного завершения, иначе false. |//| REMARK: нет. |//+------------------------------------------------------------------+bool CSampleSignal::InitClose(CIndicators* indicators)
{
//--- инициализация объекта таймсерииif (!m_close.Create(m_symbol.Name(),m_period))
{
printf ( __FUNCTION__ + ": ошибка инициализации объекта" );
return ( false );
}
//--- добавление объекта в коллекциюif (!indicators.Add( GetPointer (m_close)))
{
printf ( __FUNCTION__ + ": ошибка добавления объекта" );
return ( false );
}
//--- успешное завершениеreturn ( true );
}
//+------------------------------------------------------------------+//| Проверка выполнения условия для покупки. |//| INPUT: price - ссылка для размещения цены открытия, |//| sl - ссылка для размещения цены stop loss, |//| tp - ссылка для размещения цены take profit, |//| expiration - ссылка для размещения времени истечения. |//| OUTPUT: true-если условие выполнено, иначе false. |//| REMARK: нет. |//+------------------------------------------------------------------+bool CSampleSignal::CheckOpenLong( double & price, double & sl, double & tp, datetime & expiration)
{
//--- подготовка данныхdouble spread=m_symbol.Ask()-m_symbol.Bid();
double ma =MA( 1 );
double unit =PriceLevelUnit();
//--- проверка условияif (Open( 1 )<ma && Close( 1 )>ma && ma>MA( 2 ))
{
price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*unit);
sl =m_symbol.NormalizePrice(price-m_stop_loss*unit);
tp =m_symbol.NormalizePrice(price+m_take_profit*unit);
expiration+=m_expiration* PeriodSeconds (m_period);
//--- условие выполненоreturn ( true );
}
//--- условие не выполненоreturn ( false );
}
//+------------------------------------------------------------------+//| Проверка выполнения условия для продажи. |//| INPUT: price - ссылка для размещения цены открытия, |//| sl - ссылка для размещения цены stop loss, |//| tp - ссылка для размещения цены take profit, |//| expiration - ссылка для размещения времени истечения. |//| OUTPUT: true-если условие выполнено, иначе false. |//| REMARK: нет. |//+------------------------------------------------------------------+bool CSampleSignal::CheckOpenShort( double & price, double & sl, double & tp, datetime & expiration)
{
//--- подготовка данныхdouble ma =MA( 1 );
double unit=PriceLevelUnit();
//--- проверка условияif (Open( 1 )>ma && Close( 1 )<ma && ma<MA( 2 ))
{
price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*unit);
sl =m_symbol.NormalizePrice(price+m_stop_loss*unit);
tp =m_symbol.NormalizePrice(price-m_take_profit*unit);
expiration+=m_expiration* PeriodSeconds (m_period);
//--- условие выполненоreturn ( true );
}
//--- условие не выполненоreturn ( false );
}
//+------------------------------------------------------------------+//| Проверка выполнения условия для модификации ордера на покупку. |//| INPUT: order - указатель на объект-ордер, |//| price - ссылка для размещения новой цены открытия. |//| OUTPUT: true-если условие выполнено, иначе false. |//| REMARK: нет. |//+------------------------------------------------------------------+bool CSampleSignal::CheckTrailingOrderLong(COrderInfo* order, double & price)
{
//--- проверка указателяif (order== NULL ) return ( false );
//--- подготовка данныхdouble spread =m_symbol.Ask()-m_symbol.Bid();
double ma =MA( 1 );
double unit =PriceLevelUnit();
double new_price=m_symbol.NormalizePrice(ma-m_limit*unit+spread);
//--- проверка условияif (order.PriceOpen()==new_price) return ( false );
price=new_price;
//--- условие выполненоreturn ( true );
}
//+------------------------------------------------------------------+//| Проверка выполнения условия для модификации ордера на продажу. |//| INPUT: order - указатель на объект-ордер, |//| price - ссылка для размещения новой цены открытия. |//| OUTPUT: true-если условие выполнено, иначе false. |//| REMARK: нет. |//+------------------------------------------------------------------+bool CSampleSignal::CheckTrailingOrderShort(COrderInfo* order, double & price)
{
//--- проверка указателяif (order== NULL ) return ( false );
//--- подготовка данныхdouble ma =MA( 1 );
double unit=PriceLevelUnit();
double new_price=m_symbol.NormalizePrice(ma+m_limit*unit);
//--- проверка условияif (order.PriceOpen()==new_price) return ( false );
price=new_price;
//--- условие выполненоreturn ( true );
}
//+------------------------------------------------------------------+
나 자신은 이미 프로그래밍이 내 것이 아니라는 것을 깨달았지만 MQL5 Master와 친구가 되었습니다. 그러나 거래 신호의 일부 모듈을 컴파일할 때 경고가 나타납니다. 이러한 경고가 얼마나 중요한지, 그리고 어렵지 않다면 그림에 표시된 경고를 제거하기 위해 거래 신호 모듈의 코드에서 수정해야 할 사항을 알려주십시오.
거래 모듈을 기반으로 Expert Advisors를 생성할 수 있는 MQL5 Wizard와 같은 훌륭한 도구 프로그래밍 분야에 대한 지식이 없는 사람들을 위해 만들었습니다. MQL5 웹사이트에는 MQL5 전문가뿐만 아니라 이 포럼의 다른 회원들도 몇 년 전에 작성한 흥미로운 거래 신호 모듈이 많이 있습니다. 그건 그렇고, 당신의 노고에 대해 모두 감사합니다! 그러나 지속적으로 발생하여 MQL5 마법사의 모든 기능을 최대한 활용하지 못하게 하는 작은 "그러나"가 있습니다.
프로그래밍 언어의 지속적인 개발로 인해 이러한 변경 사항의 모든 뉘앙스를 표시하고 코드 수정과 관련하여 필요한 조치를 설명하는 분기를 만들 것을 요청합니다. 예를 들어, 거래 신호 모듈에서 이러한 문제:
MrBrooklin :
안녕하세요!
노란색으로 강조 표시된 줄에서 컴파일러 경고 를 제거하기 위해 거래 신호 모듈의 코드에서 수정해야 할 사항을 알려주십시오.
안부 인사를 전합니다. 블라디미르.
내 제안이 받아들여지면 브랜치에 "거래 신호 모듈의 개정판"과 같은 이름을 지정할 수 있습니다.
노란색으로 강조 표시된 줄에서 컴파일러 경고 를 제거하기 위해 거래 신호 모듈의 코드에서 수정해야 할 사항을 알려주십시오.
안부 인사를 전합니다. 블라디미르.
한 곳에서 "m_symbol" 개체를 언급하는 이유는 무엇입니까?
int Bars_= Bars (m_symbol.Name(),m_Ind_Timeframe);
그리고 갑자기 Symbol():
int Bars_= Bars ( Symbol (),m_Ind_Timeframe); // ПРЕДУПРЕЖДЕНИЕ В ЭТОЙ СТРОКЕ КОДА: deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
그렇게 할 필요는 없습니다.
그리고 갑자기 숨겨진 메서드 호출에 대한 경고가 나타나는 이유를 이해하려면 Symbol에 마우스를 놓고 마우스 가운데 버튼을 누르십시오. 그런 메서드가 있음을 알 수 있습니다.
안녕하세요.
뉴스 백테스팅을 위한 기성 솔루션이 있습니까?
무슨 일이야?
티켓 에서 닫힌 위치 의 이익을 찾는 방법은 무엇입니까?
무슨 일이야?
티켓 에서 닫힌 위치 의 이익을 찾는 방법은 무엇입니까?
포지션 티켓으로 모든 거래를 선택하고 분류하여 거래, 수수료 및 스왑의 이익을 요약해야합니다.
안녕하세요!
나 자신은 이미 프로그래밍이 내 것이 아니라는 것을 깨달았지만 MQL5 Master와 친구가 되었습니다. 그러나 거래 신호의 일부 모듈을 컴파일할 때 경고가 나타납니다. 이러한 경고가 얼마나 중요한지, 그리고 어렵지 않다면 그림에 표시된 경고를 제거하기 위해 거래 신호 모듈의 코드에서 수정해야 할 사항을 알려주십시오.
안부 인사를 전합니다. 블라디미르.
거래 신호 모듈 코드
안녕하세요!
나 자신은 이미 프로그래밍이 내 것이 아니라는 것을 깨달았지만 MQL5 Master와 친구가 되었습니다. 그러나 거래 신호의 일부 모듈을 컴파일할 때 경고가 나타납니다. 이러한 경고가 얼마나 중요한지, 그리고 어렵지 않다면 그림에 표시된 경고를 제거하기 위해 거래 신호 모듈의 코드에서 수정해야 할 사항을 알려주십시오.
안부 인사를 전합니다. 블라디미르.
거래 신호 모듈 코드
언어가 발전하고 있습니다.
대체: (ctrl+h)
m_open -> m_open_sample
m_close -> m_close_sample
m_expiration -> m_expiration_sample
언어가 발전하고 있습니다.
대체: (ctrl+h)
m_open -> m_open_sample
m_close -> m_close_sample
m_expiration -> m_expiration_sample
빠르고 명확한 답변을 해주신 Vladimir님, 감사합니다. 모든 경고가 제거되었습니다.
안부 인사를 전합니다. 블라디미르.
안녕하세요!
노란색으로 강조 표시된 줄에서 컴파일러 경고 를 제거하기 위해 거래 신호 모듈의 코드에서 수정해야 할 사항을 알려주십시오.
안부 인사를 전합니다. 블라디미르.
안녕하세요, MQL5 언어 개발자 여러분!
거래 모듈을 기반으로 Expert Advisors를 생성할 수 있는 MQL5 Wizard와 같은 훌륭한 도구 프로그래밍 분야에 대한 지식이 없는 사람들을 위해 만들었습니다. MQL5 웹사이트에는 MQL5 전문가뿐만 아니라 이 포럼의 다른 회원들도 몇 년 전에 작성한 흥미로운 거래 신호 모듈이 많이 있습니다. 그건 그렇고, 당신의 노고에 대해 모두 감사합니다! 그러나 지속적으로 발생하여 MQL5 마법사의 모든 기능을 최대한 활용하지 못하게 하는 작은 "그러나"가 있습니다.
프로그래밍 언어의 지속적인 개발로 인해 이러한 변경 사항의 모든 뉘앙스를 표시하고 코드 수정과 관련하여 필요한 조치를 설명하는 분기를 만들 것을 요청합니다. 예를 들어, 거래 신호 모듈에서 이러한 문제:
안녕하세요!
노란색으로 강조 표시된 줄에서 컴파일러 경고 를 제거하기 위해 거래 신호 모듈의 코드에서 수정해야 할 사항을 알려주십시오.
안부 인사를 전합니다. 블라디미르.
내 제안이 받아들여지면 브랜치에 "거래 신호 모듈의 개정판"과 같은 이름을 지정할 수 있습니다.
안부 인사를 전합니다. 블라디미르.
안녕하세요!
노란색으로 강조 표시된 줄에서 컴파일러 경고 를 제거하기 위해 거래 신호 모듈의 코드에서 수정해야 할 사항을 알려주십시오.
안부 인사를 전합니다. 블라디미르.
한 곳에서 "m_symbol" 개체를 언급하는 이유는 무엇입니까?
그리고 갑자기 Symbol():
그렇게 할 필요는 없습니다.
그리고 갑자기 숨겨진 메서드 호출에 대한 경고가 나타나는 이유를 이해하려면 Symbol에 마우스를 놓고 마우스 가운데 버튼을 누르십시오. 그런 메서드가 있음을 알 수 있습니다.
ExpertBase 파일에서
따라서 신호 모듈에는 m_symbol을 사용해야 합니다.
한 곳에서 "m_symbol" 개체를 언급하는 이유는 무엇입니까?
그리고 갑자기 Symbol():
그렇게 할 필요는 없습니다.
팁을 주신 Vladimir에게 감사드립니다!
문제는 이 모듈이 사이트에서 다운로드되었고 단순히 MetaEditor에서 컴파일되었다는 것입니다. 거래 신호 모듈 을 사용하여 다른 작업(예: 코드 변경 등)이 수행되지 않았으며 컴파일러 자체에서 경고가 발생했습니다.
안부 인사를 전합니다. 블라디미르.