double lostProfit(ulong ticket)
{
Print("****** "+__FUNCTION__+"******");
if(HistoryOrderSelect(ticket))
{
ulong pos_ID = HistoryOrderGetInteger(ticket,ORDER_POSITION_ID);
if(my_History.SelectByIndex(pos_ID)) // possible loss of data due to type conversion
{
Print("****** "+string(equity_plus[arr_size-1] - my_History.TakeProfit())+" ******");
return(equity_plus[arr_size-1] - my_History.TakeProfit());
}
elsePrint("--- Не выбрана позиция по ID "+string(pos_ID));
}
elsePrint("--- Не выбран ордер по тикету "+string(ticket));
return(0.0);
}
Позиция с магиком 2810292634423737, тикетом 2 и лотом 0.1 успешно закрыта.
****** lostProfit******
--- Не выбрана позиция по ID 2
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
Für mich selbst habe ich bereits festgestellt, dass das Programmieren nicht meins ist, aber ich habe es geschafft, mich mit dem MQL5-Master anzufreunden. Beim Kompilieren einiger Module von Handelssignalen werden jedoch Warnungen angezeigt. Wie kritisch sind diese Warnungen, und wenn nicht schwierig, dann sagen Sie mir, was im Code des Handelssignalmoduls korrigiert werden muss, um die im Bild gezeigten Warnungen zu beseitigen.
Mit freundlichen Grüßen, Wladimir.
Modulcode für Handelssignale
//+------------------------------------------------------------------+//| 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 );
}
//+------------------------------------------------------------------+
Ich habe bereits verstanden, dass Programmieren nichts für mich ist, aber ich habe es geschafft, mich mit dem MQL5-Assistenten anzufreunden. Beim Kompilieren einiger Module für Handelssignale erhalte ich jedoch Warnungen. Wie kritisch sind diese Warnungen, und wenn möglich, geben Sie bitte an, was im Code des Handelssignalmoduls zu ändern ist, um die im Bild gezeigten Warnungen zu vermeiden.
Bitte geben Sie an, was im Code des Handelssignal-Moduls korrigiert werden sollte, um die Compiler-Warnung in der gelb markierten Zeile auszuschließen.
Sie haben ein so hervorragendes Tool wie den MQL5-Assistenten für Menschen ohne Programmierkenntnisse geschaffen, mit dem Expert Advisors auf der Grundlage von Handelsmodulen erstellt werden können. Die MQL5-Website enthält eine Menge interessanter Handelssignalmodule, die vor einigen Jahren von MQL5-Profis und anderen MQL5-Forumsmitgliedern geschrieben wurden. Übrigens, ichdanke Ihnen allen für Ihre Arbeit! Es gibt jedoch ein kleines "aber", das die volle Leistungsfähigkeit des MQL5-Assistenten immer wieder behindert.
Da die Programmiersprache ständig weiterentwickelt wird, bitte ich Sie, einen Zweig zu erstellen, der alle Nuancen dieser Änderungen widerspiegelt und die notwendigen Maßnahmen in Form von Code-Korrekturen, z. B. in Handelssignal-Modulen, beschreibt, um solche Probleme zu vermeiden:
MrBrooklin:
Hallo!
Bitte geben Sie an, was Sie im Code des Trading Signals-Moduls korrigieren sollten, um die Compiler-Warnung in dieser gelb markierten Zeile zu vermeiden.
Mit freundlichen Grüßen, Vladimir.
Wenn mein Vorschlag akzeptabel ist, könnte dieses Thema z.B. den Titel "Überarbeitung der Handelssignalmodule" tragen.
Bitte geben Sie an, was Sie im Code des Handelssignal-Moduls korrigieren sollten, um die Compiler-Warnung in der gelb markierten Zeile auszuschließen.
Mit freundlichen Grüßen, Vladimir.
Warum sprechen Sie das Objekt "m_symbol" an einer Stelle an?
int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe);
und dann plötzlich zu Symbol():
int Bars_=Bars(Symbol(),m_Ind_Timeframe); // ПРЕДУПРЕЖДЕНИЕ В ЭТОЙ СТРОКЕ КОДА: deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
Das sollten Sie nicht tun.
Um zu verstehen, warum es plötzlich eine Warnung über den Aufruf der versteckten Methode gibt, setzen Sie den Mauszeiger auf das Symbol und drücken Sie die mittlere Maustaste: Sie werden sehen, dass es eine solche Methode in
in der ExpertBase-Datei.
Daher sollten Sie m_symbol im Modul signals verwenden.
Warum greifen Sie auf das Objekt "m_symbol" nur an einer Stelle zu?
und dann plötzlich zu Symbol():
Das sollten Sie nicht tun.
Danke, Vladimir, für den Tipp!
Die Sache ist die, dass dieses Modul von der Website heruntergeladen und einfach in MetaEditor kompiliert wurde. Ich habe keine anderen Operationen (z. B. Codeänderungen usw.) mitdem Modul für Handelssignale durchgeführt, und die Warnung wurde vom Compiler selbst erzeugt.
Hallo.
Können Sie mir bitte sagen, ob es eine fertige Lösung für das Backtesting nach Nachrichten gibt?
Können Sie mir sagen, was los ist?
Wie erkenne ich den Gewinn einer geschlossenen Position auf einem Ticket?
Können Sie mir sagen, was los ist?
Wie erkenne ich den Gewinn einer geschlossenen Position auf einem Ticket?
Wählen Sie alle Geschäfte in der ticketierten Position aus und addieren Sie den Gewinn, die Provision und den Swap des Geschäfts.
Hallo!
Für mich selbst habe ich bereits festgestellt, dass das Programmieren nicht meins ist, aber ich habe es geschafft, mich mit dem MQL5-Master anzufreunden. Beim Kompilieren einiger Module von Handelssignalen werden jedoch Warnungen angezeigt. Wie kritisch sind diese Warnungen, und wenn nicht schwierig, dann sagen Sie mir, was im Code des Handelssignalmoduls korrigiert werden muss, um die im Bild gezeigten Warnungen zu beseitigen.
Mit freundlichen Grüßen, Wladimir.
Modulcode für Handelssignale
Hallo!
Ich habe bereits verstanden, dass Programmieren nichts für mich ist, aber ich habe es geschafft, mich mit dem MQL5-Assistenten anzufreunden. Beim Kompilieren einiger Module für Handelssignale erhalte ich jedoch Warnungen. Wie kritisch sind diese Warnungen, und wenn möglich, geben Sie bitte an, was im Code des Handelssignalmoduls zu ändern ist, um die im Bild gezeigten Warnungen zu vermeiden.
Mit freundlichen Grüßen, Vladimir.
Handelssignal-Modul-Code
Die Sprache entwickelt sich weiter.
Ersetzungen vornehmen: (ctrl+h)
m_open -> m_open_sample
m_close -> m_close_sample
m_Ablauf -> m_Ablauf_Probe
Die Sprache entwickelt sich weiter.
Ersetzungen vornehmen: (ctrl+h)
m_open -> m_open_sample
m_close -> m_close_sample
m_Ablauf -> m_Ablauf_Probe
Danke, Vladimir, für deine schnelle und klare Antwort. Alle Warnungen wurden beseitigt.
Mit freundlichen Grüßen, Vladimir.
Hallo!
Bitte geben Sie an, was im Code des Handelssignal-Moduls korrigiert werden sollte, um die Compiler-Warnung in der gelb markierten Zeile auszuschließen.
Mit freundlichen Grüßen, Vladimir.
Hallo, liebe Entwickler von MQL5!
Sie haben ein so hervorragendes Tool wie den MQL5-Assistenten für Menschen ohne Programmierkenntnisse geschaffen, mit dem Expert Advisors auf der Grundlage von Handelsmodulen erstellt werden können. Die MQL5-Website enthält eine Menge interessanter Handelssignalmodule, die vor einigen Jahren von MQL5-Profis und anderen MQL5-Forumsmitgliedern geschrieben wurden. Übrigens, ichdanke Ihnen allen für Ihre Arbeit! Es gibt jedoch ein kleines "aber", das die volle Leistungsfähigkeit des MQL5-Assistenten immer wieder behindert.
Da die Programmiersprache ständig weiterentwickelt wird, bitte ich Sie, einen Zweig zu erstellen, der alle Nuancen dieser Änderungen widerspiegelt und die notwendigen Maßnahmen in Form von Code-Korrekturen, z. B. in Handelssignal-Modulen, beschreibt, um solche Probleme zu vermeiden:
Hallo!
Bitte geben Sie an, was Sie im Code des Trading Signals-Moduls korrigieren sollten, um die Compiler-Warnung in dieser gelb markierten Zeile zu vermeiden.
Mit freundlichen Grüßen, Vladimir.
Wenn mein Vorschlag akzeptabel ist, könnte dieses Thema z.B. den Titel "Überarbeitung der Handelssignalmodule" tragen.
Mit freundlichen Grüßen, Vladimir.
Hallo!
Bitte geben Sie an, was Sie im Code des Handelssignal-Moduls korrigieren sollten, um die Compiler-Warnung in der gelb markierten Zeile auszuschließen.
Mit freundlichen Grüßen, Vladimir.
Warum sprechen Sie das Objekt "m_symbol" an einer Stelle an?
und dann plötzlich zu Symbol():
Das sollten Sie nicht tun.
Um zu verstehen, warum es plötzlich eine Warnung über den Aufruf der versteckten Methode gibt, setzen Sie den Mauszeiger auf das Symbol und drücken Sie die mittlere Maustaste: Sie werden sehen, dass es eine solche Methode in
in der ExpertBase-Datei.
Daher sollten Sie m_symbol im Modul signals verwenden.
Warum greifen Sie auf das Objekt "m_symbol" nur an einer Stelle zu?
und dann plötzlich zu Symbol():
Das sollten Sie nicht tun.
Danke, Vladimir, für den Tipp!
Die Sache ist die, dass dieses Modul von der Website heruntergeladen und einfach in MetaEditor kompiliert wurde. Ich habe keine anderen Operationen (z. B. Codeänderungen usw.) mitdem Modul für Handelssignale durchgeführt, und die Warnung wurde vom Compiler selbst erzeugt.
Mit freundlichen Grüßen, Vladimir.