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
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
Per quanto mi riguarda, mi sono già reso conto che la programmazione non è mia, ma sono riuscita a fare amicizia con il Master MQL5. Tuttavia, durante la compilazione di alcuni moduli di segnali di trading, vengono visualizzati avvisi. Quanto sono critici questi avvisi, e se non difficili, allora dimmi cosa deve essere corretto nel codice del modulo dei segnali di trading per eliminare gli avvisi mostrati nell'immagine.
Con i migliori saluti, Vladimir.
Codice modulo segnali di trading
//+------------------------------------------------------------------+//| 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 );
}
//+------------------------------------------------------------------+
Ho già capito che la programmazione non fa per me, ma sono riuscito a fare amicizia con il Wizard MQL5. Tuttavia, quando compilo alcuni moduli di segnali di trading, ricevo degli avvertimenti. Quanto sono critici questi avvertimenti e, se possibile, consigliate cosa cambiare nel codice del modulo dei segnali di trading per evitare gli avvertimenti mostrati nell'immagine.
Si prega di consigliare cosa dovrebbe essere corretto nel codice del modulo dei segnali di trading per escludere l'avvertimento del compilatore nella linea evidenziata in giallo.
Avete creato uno strumento eccellente come MQL5 Wizard per persone senza conoscenze di programmazione che possono generare Expert Advisors basati su moduli di trading. Il sito web di MQL5 contiene un sacco di interessanti moduli di segnali di trading che sono stati scritti alcuni anni fa da professionisti MQL5 e da altri membri del forum MQL5. A proposito,grazie a tutti per il vostro lavoro! Tuttavia, c'è un piccolo "ma" che continua ad ostacolare la piena potenza del Wizard MQL5.
Dato che il linguaggio di programmazione è in costante sviluppo, vi chiedo di creare un ramo che rifletta tutte le sfumature di questi cambiamenti e descriva le azioni necessarie in termini di correzioni di codice, per esempio, nei moduli dei segnali di trading per evitare tali problemi:
MrBrooklin:
Ciao!
Si prega di consigliare cosa si dovrebbe correggere nel codice del modulo Trading Signals per evitare l 'avvertimento del compilatore in quella linea, che è evidenziata in giallo.
Sinceramente, Vladimir.
Se il mio suggerimento è accettabile, questo argomento potrebbe essere intitolato, per esempio, "Revisione dei moduli di segnali di trading".
Si prega di consigliare cosa dovrebbe essere corretto nel codice del modulo dei segnali di trading per escludere l'avvertimento del compilatore nella linea evidenziata in giallo.
Sinceramente, Vladimir.
Perché si rivolge all'oggetto "m_symbol" in un posto
int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe);
e poi improvvisamente a Symbol():
int Bars_=Bars(Symbol(),m_Ind_Timeframe); // ПРЕДУПРЕЖДЕНИЕ В ЭТОЙ СТРОКЕ КОДА: deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
Non dovresti farlo.
Per capire perché improvvisamente c'è un avvertimento sulla chiamata del metodo nascosto, basta mettere il cursore del mouse su Symbol e premere il tasto centrale del mouse: vedrete che c'è un tale metodo in
nel file ExpertBase.
Pertanto, dovreste usare m_symbol nel modulo dei segnali.
Perché si accede all'oggetto "m_symbol" in un posto
e poi improvvisamente a Symbol():
Non dovreste farlo.
Grazie, Vladimir, per il suggerimento!
Il fatto è che questo modulo è stato scaricato dal sito web e semplicemente compilato in MetaEditor. Non ho eseguito altre operazioni (ad esempio, modifiche al codice, ecc.) conil modulo dei segnali di trading e l'avviso è stato generato dal compilatore stesso.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Salve.
Potete dirmi se c'è qualche soluzione già pronta per il backtesting in base alle notizie?
Puoi dirmi cosa c'è che non va?
Come faccio a sapere il profitto di una posizione chiusa su un biglietto?
Puoi dirmi cosa c'è che non va?
Come faccio a sapere il profitto di una posizione chiusa su un biglietto?
Seleziona tutti i trade nella posizione ticketed e somma il profitto del trade, la commissione e lo swap.
Ciao!
Per quanto mi riguarda, mi sono già reso conto che la programmazione non è mia, ma sono riuscita a fare amicizia con il Master MQL5. Tuttavia, durante la compilazione di alcuni moduli di segnali di trading, vengono visualizzati avvisi. Quanto sono critici questi avvisi, e se non difficili, allora dimmi cosa deve essere corretto nel codice del modulo dei segnali di trading per eliminare gli avvisi mostrati nell'immagine.
Con i migliori saluti, Vladimir.
Codice modulo segnali di trading
Ciao!
Ho già capito che la programmazione non fa per me, ma sono riuscito a fare amicizia con il Wizard MQL5. Tuttavia, quando compilo alcuni moduli di segnali di trading, ricevo degli avvertimenti. Quanto sono critici questi avvertimenti e, se possibile, consigliate cosa cambiare nel codice del modulo dei segnali di trading per evitare gli avvertimenti mostrati nell'immagine.
Cordiali saluti, Vladimir.
Codice del modulo del segnale di trading
La lingua si sta sviluppando.
Fare sostituzioni: (ctrl+h)
m_open -> m_open_sample
m_close -> m_close_sample
m_expiration -> m_expiration_sample
Il linguaggio si sta evolvendo.
Fare sostituzioni: (ctrl+h)
m_open -> m_open_sample
m_close -> m_close_sample
m_expiration -> m_expiration_sample
Grazie, Vladimir, per la tua risposta rapida e chiara. Tutti gli avvertimenti sono stati eliminati.
Sinceramente, Vladimir.
Ciao!
Si prega di consigliare cosa dovrebbe essere corretto nel codice del modulo dei segnali di trading per escludere l'avvertimento del compilatore nella linea evidenziata in giallo.
Cordiali saluti, Vladimir.
Ciao, cari sviluppatori di MQL5!
Avete creato uno strumento eccellente come MQL5 Wizard per persone senza conoscenze di programmazione che possono generare Expert Advisors basati su moduli di trading. Il sito web di MQL5 contiene un sacco di interessanti moduli di segnali di trading che sono stati scritti alcuni anni fa da professionisti MQL5 e da altri membri del forum MQL5. A proposito,grazie a tutti per il vostro lavoro! Tuttavia, c'è un piccolo "ma" che continua ad ostacolare la piena potenza del Wizard MQL5.
Dato che il linguaggio di programmazione è in costante sviluppo, vi chiedo di creare un ramo che rifletta tutte le sfumature di questi cambiamenti e descriva le azioni necessarie in termini di correzioni di codice, per esempio, nei moduli dei segnali di trading per evitare tali problemi:
Ciao!
Si prega di consigliare cosa si dovrebbe correggere nel codice del modulo Trading Signals per evitare l 'avvertimento del compilatore in quella linea, che è evidenziata in giallo.
Sinceramente, Vladimir.
Se il mio suggerimento è accettabile, questo argomento potrebbe essere intitolato, per esempio, "Revisione dei moduli di segnali di trading".
Sinceramente, Vladimir.
Ciao!
Si prega di consigliare cosa dovrebbe essere corretto nel codice del modulo dei segnali di trading per escludere l'avvertimento del compilatore nella linea evidenziata in giallo.
Sinceramente, Vladimir.
Perché si rivolge all'oggetto "m_symbol" in un posto
e poi improvvisamente a Symbol():
Non dovresti farlo.
Per capire perché improvvisamente c'è un avvertimento sulla chiamata del metodo nascosto, basta mettere il cursore del mouse su Symbol e premere il tasto centrale del mouse: vedrete che c'è un tale metodo in
nel file ExpertBase.
Pertanto, dovreste usare m_symbol nel modulo dei segnali.
Perché si accede all'oggetto "m_symbol" in un posto
e poi improvvisamente a Symbol():
Non dovreste farlo.
Grazie, Vladimir, per il suggerimento!
Il fatto è che questo modulo è stato scaricato dal sito web e semplicemente compilato in MetaEditor. Non ho eseguito altre operazioni (ad esempio, modifiche al codice, ecc.) conil modulo dei segnali di trading e l'avviso è stato generato dal compilatore stesso.
Sinceramente, Vladimir.