Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
Kendi adıma programlamanın bana ait olmadığını fark ettim ama MQL5 Master ile arkadaş olmayı başardım. Ancak, ticaret sinyallerinin bazı modüllerini derlerken uyarılar çıkıyor. Bu uyarılar ne kadar kritik ve zor değilse, resimde gösterilen uyarıları ortadan kaldırmak için alım satım sinyalleri modülünün kodunda nelerin düzeltilmesi gerektiğini söyleyin.
Saygılarımla, Vladimir.
Ticaret sinyalleri modülü kodu
//+------------------------------------------------------------------+//| 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 );
}
//+------------------------------------------------------------------+
Kendi adıma programlamanın bana ait olmadığını fark ettim ama MQL5 Master ile arkadaş olmayı başardım. Ancak, ticaret sinyallerinin bazı modüllerini derlerken uyarılar çıkıyor. Bu uyarılar ne kadar kritik ve zor değilse, resimde gösterilen uyarıları ortadan kaldırmak için alım satım sinyalleri modülünün kodunda nelerin düzeltilmesi gerektiğini söyleyin.
Lütfen sarı ile vurgulanan satırdaki derleyici uyarısını ortadan kaldırmak için alım satım sinyalleri modülünün kodunda neyin düzeltilmesi gerektiğini söyleyin.
Programlama alanında bilgisi olmayanlar için MQL5 Sihirbazı gibi harika bir araç yarattınız, bu araç ticaret modüllerine dayalı Uzman Danışmanlar üretebilir. MQL5 web sitesinde birkaç yıl önce sadece MQL5 uzmanları tarafından değil, aynı zamanda bu forumun diğer üyeleri tarafından da yazılmış birçok ilginç ticaret sinyali modülü bulunmaktadır. Bu arada, sıkı çalışmanız için hepinize teşekkür ederim! Ancak, sürekli olarak ortaya çıkan ve MQL5 Sihirbazının tüm gücünden tam olarak yararlanmanızı engelleyen küçük bir "ama" vardır.
Programlama dilinin sürekli gelişmesi nedeniyle, bu değişikliklerin tüm nüanslarını gösterecek bir dal oluşturmanızı ve ortadan kaldırmak için örneğin alım satım sinyal modüllerinde kodun düzeltilmesi açısından gerekli eylemleri açıklamanızı rica ediyorum. böyle konular:
MrBrooklin :
Merhaba!
Lütfen sarı ile vurgulanan satırdaki derleyici uyarısını ortadan kaldırmak için alım satım sinyalleri modülünün kodunda neyin düzeltilmesi gerektiğini söyleyin.
Saygılarımla, Vladimir.
Teklifim kabul edilebilirse, şubeye örneğin "Ticaret sinyali modüllerinin revizyonu" gibi bir ad verilebilir.
Lütfen sarı ile vurgulanan satırdaki derleyici uyarısını ortadan kaldırmak için alım satım sinyalleri modülünün kodunda neyin düzeltilmesi gerektiğini söyleyin.
Saygılarımla, Vladimir.
Neden tek bir yerde "m_symbol" nesnesine atıfta bulunuyorsunuz?
int Bars_= Bars (m_symbol.Name(),m_Ind_Timeframe);
ve sonra aniden Symbol()'e:
int Bars_= Bars ( Symbol (),m_Ind_Timeframe); // ПРЕДУПРЕЖДЕНИЕ В ЭТОЙ СТРОКЕ КОДА: deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
Bunu yapmak gerekli değildir.
Ve neden bir anda gizli metot çağırma uyarısı geldiğini anlamak için fareyi Symbol üzerine getirip orta fare tuşuna basmanız yeterli: Böyle bir metodun olduğunu göreceksiniz.
ExpertBase dosyasında.
Bu nedenle sinyal modülünde m_symbol kullanılmalıdır.
Neden tek bir yerde "m_symbol" nesnesine atıfta bulunuyorsunuz?
ve sonra aniden Symbol()'e:
Bunu yapmak gerekli değildir.
Bahşiş için teşekkürler Vladimir!
Mesele şu ki, bu modül siteden indirildi ve basitçe MetaEditor'da derlendi. Ticaret sinyalleri modülü ile başka hiçbir işlem (örneğin kod değişiklikleri vb.) gerçekleştirilmedi ve uyarı derleyicinin kendisi tarafından verildi.
Merhaba.
Söyleyin lütfen, haberlerin geriye dönük test edilmesi için hazır bir çözüm var mı?
Bana neyin yanlış olduğunu söyle?
Bir bilette kapalı bir pozisyonun karı nasıl bulunur?
Bana neyin yanlış olduğunu söyle?
Bir bilette kapalı bir pozisyonun karı nasıl bulunur?
Tüm işlemleri pozisyon biletine göre seçmek ve işlem, komisyon ve takasın karını özetlemek için sıralamak gerekir.
Merhaba!
Kendi adıma programlamanın bana ait olmadığını fark ettim ama MQL5 Master ile arkadaş olmayı başardım. Ancak, ticaret sinyallerinin bazı modüllerini derlerken uyarılar çıkıyor. Bu uyarılar ne kadar kritik ve zor değilse, resimde gösterilen uyarıları ortadan kaldırmak için alım satım sinyalleri modülünün kodunda nelerin düzeltilmesi gerektiğini söyleyin.
Saygılarımla, Vladimir.
Ticaret sinyalleri modülü kodu
Merhaba!
Kendi adıma programlamanın bana ait olmadığını fark ettim ama MQL5 Master ile arkadaş olmayı başardım. Ancak, ticaret sinyallerinin bazı modüllerini derlerken uyarılar çıkıyor. Bu uyarılar ne kadar kritik ve zor değilse, resimde gösterilen uyarıları ortadan kaldırmak için alım satım sinyalleri modülünün kodunda nelerin düzeltilmesi gerektiğini söyleyin.
Saygılarımla, Vladimir.
Ticaret sinyalleri modülü kodu
Dil gelişiyor.
Değişiklikleri yapın: (ctrl+h)
m_open -> m_open_sample
m_close -> m_close_sample
m_expiration -> m_expiration_sample
Dil gelişiyor.
Değişiklikleri yapın: (ctrl+h)
m_open -> m_open_sample
m_close -> m_close_sample
m_expiration -> m_expiration_sample
Vladimir, hızlı ve net cevap için teşekkürler. Tüm uyarılar kaldırıldı.
Saygılarımla, Vladimir.
Merhaba!
Lütfen sarı ile vurgulanan satırdaki derleyici uyarısını ortadan kaldırmak için alım satım sinyalleri modülünün kodunda neyin düzeltilmesi gerektiğini söyleyin.
Saygılarımla, Vladimir.
Merhaba, MQL5 dilinin sevgili geliştiricileri!
Programlama alanında bilgisi olmayanlar için MQL5 Sihirbazı gibi harika bir araç yarattınız, bu araç ticaret modüllerine dayalı Uzman Danışmanlar üretebilir. MQL5 web sitesinde birkaç yıl önce sadece MQL5 uzmanları tarafından değil, aynı zamanda bu forumun diğer üyeleri tarafından da yazılmış birçok ilginç ticaret sinyali modülü bulunmaktadır. Bu arada, sıkı çalışmanız için hepinize teşekkür ederim! Ancak, sürekli olarak ortaya çıkan ve MQL5 Sihirbazının tüm gücünden tam olarak yararlanmanızı engelleyen küçük bir "ama" vardır.
Programlama dilinin sürekli gelişmesi nedeniyle, bu değişikliklerin tüm nüanslarını gösterecek bir dal oluşturmanızı ve ortadan kaldırmak için örneğin alım satım sinyal modüllerinde kodun düzeltilmesi açısından gerekli eylemleri açıklamanızı rica ediyorum. böyle konular:
Merhaba!
Lütfen sarı ile vurgulanan satırdaki derleyici uyarısını ortadan kaldırmak için alım satım sinyalleri modülünün kodunda neyin düzeltilmesi gerektiğini söyleyin.
Saygılarımla, Vladimir.
Teklifim kabul edilebilirse, şubeye örneğin "Ticaret sinyali modüllerinin revizyonu" gibi bir ad verilebilir.
Saygılarımla, Vladimir.
Merhaba!
Lütfen sarı ile vurgulanan satırdaki derleyici uyarısını ortadan kaldırmak için alım satım sinyalleri modülünün kodunda neyin düzeltilmesi gerektiğini söyleyin.
Saygılarımla, Vladimir.
Neden tek bir yerde "m_symbol" nesnesine atıfta bulunuyorsunuz?
ve sonra aniden Symbol()'e:
Bunu yapmak gerekli değildir.
Ve neden bir anda gizli metot çağırma uyarısı geldiğini anlamak için fareyi Symbol üzerine getirip orta fare tuşuna basmanız yeterli: Böyle bir metodun olduğunu göreceksiniz.
ExpertBase dosyasında.
Bu nedenle sinyal modülünde m_symbol kullanılmalıdır.
Neden tek bir yerde "m_symbol" nesnesine atıfta bulunuyorsunuz?
ve sonra aniden Symbol()'e:
Bunu yapmak gerekli değildir.
Bahşiş için teşekkürler Vladimir!
Mesele şu ki, bu modül siteden indirildi ve basitçe MetaEditor'da derlendi. Ticaret sinyalleri modülü ile başka hiçbir işlem (örneğin kod değişiklikleri vb.) gerçekleştirilmedi ve uyarı derleyicinin kendisi tarafından verildi.
Saygılarımla, Vladimir.