Hepinize iyi günler. Bir danışman var - trendin kesiştiğine dair sinyaller ve yatay çizgiler belirli renk. Belli bir stilin trend ve yatay çizgilerinin kesiştiği noktada bip sesi çıkaracak şekilde yeniden yapmaya karar verdim. Olmuş. Ancak, sadece sağda bir ışın olan trend çizgisi geçtiğinde sinyal vermem gerekiyor. ne yapılması gerektiğini anlıyorum
OBJPROP_RAY_RIGHT
ama ben yetişene kadar nerede ve nasıl. Şimdiden teşekkürler.
//+------------------------------------------------------------------+//| TrendlineCrossAlert.mq5 |//| Copyright 2018, Strx |//| https://www.mql5.com/en/users/strx |//+------------------------------------------------------------------+#define EAName "TrendlineCrossAlert"#define EAVersion "1.01"#property copyright"Copyright 2018, Strx"#property link"https://www.mql5.com/en/users/strx"#property version EAVersion
#property description"Horizontal and Trendlines cross detection on any pair/timeframe"#property description"good for scalping on small timeframes (M1 to M15) and trend following on bigger ones."#property description"It send notifications when price crosses trendlines and horizontal lines"#property description"of specified color and when it happens, it change its color to CrossedColor input parameter"#property description"to be sure not to send multiple notifications for same line"#include <Arrays\ArrayString.mqh>
#include <Trade\SymbolInfo.mqh>
#include <ChartObjects\ChartObject.mqh>
#include <ChartObjects\ChartObjectsLines.mqh>
//--- External inputssinputENUM_LINE_STYLE MonitoringStyle = STYLE_SOLID ; //MonitoringColor, EA only monitors this lines stylesinputENUM_LINE_STYLE CrossedStyle = STYLE_DASH ; //CrossedColor, EA changes crossed lines style to this valuesinputbool EnableAlerts = true ;
sinputbool EnableNotifications= true ;
sinputbool EnableEmails= false ;
//+------------------------------------------------------------------+//| Trendlines and Horizontal lines crossing notification expert//+------------------------------------------------------------------+class CTrendlineCrossAlertExpert
{
protected :
CSymbolInfo m_symbol; // symbol info object//--- Logic vars
CArrayString m_objectNames;
public :
CTrendlineCrossAlertExpert( void );
~CTrendlineCrossAlertExpert( void );
bool Init( void );
void Deinit( void );
bool Processing( void );
protected :
//--- Inline functions string FormatPrice( double price){ returnStringFormat ( "%." +( string )m_symbol. Digits ()+ "f" ,price); };
bool IsNewBar(){ returniVolume ( NULL , 0 , 0 )== 1 ; };
//--- Logic functionsint FindActiveObjects();
bool ActiveObject( string objName);
bool PriceCrossed( string objName);
void NotifyCrossing( string objName);
};
//--- global expert
CTrendlineCrossAlertExpert ExtExpert;
//+------------------------------------------------------------------+//| Constructor |//+------------------------------------------------------------------+
CTrendlineCrossAlertExpert::CTrendlineCrossAlertExpert( void ){}
//+------------------------------------------------------------------+//| Destructor |//+------------------------------------------------------------------+
CTrendlineCrossAlertExpert::~CTrendlineCrossAlertExpert( void ){}
//+------------------------------------------------------------------+//| Initialization and checking for input parameters |//+------------------------------------------------------------------+bool CTrendlineCrossAlertExpert::Init( void )
{
//--- initialize common information
m_symbol.Name( Symbol ()); // symbol return ( true );
}
//+------------------------------------------------------------------+//| main function returns true if any position processed |//+------------------------------------------------------------------+bool CTrendlineCrossAlertExpert::Processing( void )
{
bool rv= false ;
int i;
string objName;
if (m_symbol.RefreshRates())
{
if (FindActiveObjects())
{
for (i= 0 ; i<m_objectNames.Total(); i++)
{
objName=m_objectNames[i];
if (PriceCrossed(objName))
{
ObjectSetInteger ( 0 ,objName, OBJPROP_STYLE ,CrossedStyle);
NotifyCrossing(objName);
}
}
}
}
Comment (EAName, " v." ,EAVersion, " parameters: MonitoringStyle=" ,MonitoringStyle, ", CrossedStyle=" ,CrossedStyle, ", EnableAlerts=" ,EnableAlerts, ", EnableNotifications=" ,EnableNotifications, ", EnableEmails=" ,EnableEmails, "\n" ,
"Monitoring " ,m_objectNames.Total(), " lines" );
return (rv);
}
//+------------------------------------------------------------------+//| Send Notifications function//+------------------------------------------------------------------+void CTrendlineCrossAlertExpert::NotifyCrossing( string objName)
{
string msg= "Price crossed line ''" +objName+ "' on " +m_symbol.Name();
if (EnableAlerts) Alert (msg);
if (EnableNotifications) SendNotification (msg);
if (EnableEmails) SendMail (EAName+ " Event" ,msg);
Print (msg);
}
//+------------------------------------------------------------------+//| Returns true if objName has been crossed up or down by current price//+------------------------------------------------------------------+bool CTrendlineCrossAlertExpert::PriceCrossed( string objName)
{
ENUM_OBJECT objType;
double objPrice= 0.0 ,openPrice,curPrice;
objType=( ENUM_OBJECT ) ObjectGetInteger ( 0 ,objName, OBJPROP_TYPE );
if (objType== OBJ_HLINE )
{
objPrice= ObjectGetDouble ( 0 , objName, OBJPROP_PRICE );
} elseif (objType== OBJ_TREND ){
objPrice= ObjectGetValueByTime ( 0 ,objName, TimeCurrent (), 0 );
}
if (objPrice)
{
openPrice= iOpen ( NULL , 0 , 0 );
curPrice = iClose ( NULL , 0 , 0 );
return (openPrice<=objPrice && curPrice>objPrice) || (openPrice>=objPrice && curPrice<objPrice);
}
returnfalse ;
}
//+------------------------------------------------------------------+//| Returns true if object has to be monitored based on color and//| previous crosses//+------------------------------------------------------------------+bool CTrendlineCrossAlertExpert::ActiveObject( string objName)
{
int objStyle=( int ) ObjectGetInteger ( 0 ,objName, OBJPROP_STYLE , 0 );
return objStyle == MonitoringStyle;
}
//+------------------------------------------------------------------+//| Returns the list of object to be monitored//+------------------------------------------------------------------+int CTrendlineCrossAlertExpert::FindActiveObjects()
{
m_objectNames.Clear();
int nHLines= ObjectsTotal ( 0 ,- 1 , OBJ_HLINE ),
nTrendLines= ObjectsTotal ( 0 ,- 1 , OBJ_TREND ),
i;
string objName;
for (i= 0 ; i<nHLines; i++)
{
objName= ObjectName ( 0 ,i, 0 , OBJ_HLINE );
if (ActiveObject(objName))
{
m_objectNames.Add(objName);
}
}
for (i= 0 ; i<nTrendLines; i++)
{
objName= ObjectName ( 0 ,i, 0 , OBJ_TREND );
if (ActiveObject(objName))
{
m_objectNames.Add(objName);
}
}
return m_objectNames.Total();
}
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit ( void )
{
if (!ExtExpert.Init())
return ( INIT_FAILED );
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert new tick handling function |//+------------------------------------------------------------------+voidOnTick ( void )
{
ExtExpert.Processing();
}
//+------------------------------------------------------------------+
Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Tünaydın. Fikire göre, danışman yeni bir çubuk göründüğünde koşulları kontrol etmeli ve siparişleri açmalıdır.
"Yalnızca global, ad alanı veya sınıf kapsamında işlev bildirimlerine izin verilir" hatası veriyor. Translated: "İşlev bildirimlerine yalnızca genel kapsamda, ad alanında veya sınıfta izin verilir." Hala anlamıyorum, aptal. Lütfen bana söyle ya da nerede okuyacağımı söyle. Şimdiden teşekkürler!)
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
Bir anlaşma açma kodunu gönderebilir misiniz, neden işe yaramadığını göreceğim
Numara
parametre 0 bu çizelgeye ait olduğunu gösterir
işlevle karıştırdım özür dilerim
StringFindBir anlaşma açma kodunu gönderebilir misiniz, neden işe yaramadığını göreceğim
İşte fonksiyonların
Buraya fonksiyonlarını ekledim
Birinci
OrderOfSymbol=CounterOrderTradeType(- 1 );buraya getirilmeli
Gerisini şimdi düzelteceğim.Buraya fonksiyonlarını ekledim
denemek
Biraz daha ince ayar ve güncelleme
Henüz evde değilim, yarın test edeceğim. Teşekkür ederim.
Henüz evde değilim, yarın test edeceğim. Teşekkür ederim.
Hepinize iyi günler. Bir danışman var - trendin kesiştiğine dair sinyaller ve yatay çizgiler belirli renk. Belli bir stilin trend ve yatay çizgilerinin kesiştiği noktada bip sesi çıkaracak şekilde yeniden yapmaya karar verdim. Olmuş. Ancak, sadece sağda bir ışın olan trend çizgisi geçtiğinde sinyal vermem gerekiyor. ne yapılması gerektiğini anlıyorum
OBJPROP_RAY_RIGHT
Tünaydın.
Fikire göre, danışman yeni bir çubuk göründüğünde koşulları kontrol etmeli ve siparişleri açmalıdır.
"Yalnızca global, ad alanı veya sınıf kapsamında işlev bildirimlerine izin verilir" hatası veriyor. Translated: "İşlev bildirimlerine yalnızca genel kapsamda, ad alanında veya sınıfta izin verilir."
Hala anlamıyorum, aptal. Lütfen bana söyle ya da nerede okuyacağımı söyle. Şimdiden teşekkürler!)
***