Порт-моне тв: Não sei por que o seu não funciona e já experimentei antes não consigo lembrar! De qualquer forma, obrigado a todos! Tenha um bom negócio!
Você pode postar o código para abrir um negócio, eu verei porque não funciona
Bom dia a todos. Tenho um EA que sinaliza quando a linha de tendência e a linhahorizontal cruzam uma determinada cor. Decidi refazê-lo de forma a sinalizar quando a linha de tendência e a linha horizontal cruzam um certo estilo. Funcionou. Mas eu preciso dele para sinalizar quando uma linha de tendência cruza apenas a viga à direita. Entendo que tenho de acrescentar
OBJPROP_RAY_RIGHT
mas eu não sei onde ou como. Obrigado de antemão.
//+------------------------------------------------------------------+//| 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
Boa tarde. O Expert Advisor deve verificar as condições e abrir pedidos quando um novo bar aparece.
Recebi o erro" declarações defunção são permitidas somente em âmbito global, de espaço de nomes ou de classe". Traduziu-o em "declarações de função permitidas apenas em âmbito global, de espaço de nomes ou de classe". Ainda não entendo, sou muito denso. Por favor, me diga ou me diga onde ler. Obrigado antecipadamente)
Você pode postar o código para abrir um negócio, eu verei porque não funciona
não
o parâmetro 0 indica que pertence a este gráfico
Desculpe, confuso com a função
StringFindVocê pode postar o código para abrir um comércio, eu verei porque não funciona
Aqui está colando suas funções
Aqui está colando suas características
Primeiro
OrderOfSymbol=CounterOrderTradeType(-1);deve ser colocado aqui.
Eu consertarei o resto.Aqui está colando suas funções
Tente
Eu o ajustei um pouco mais e o atualizei
Estou fora de casa, vou testá-lo amanhã. Obrigado.
Estou fora de casa, vou testá-lo amanhã. Obrigado.
Bom dia a todos. Tenho um EA que sinaliza quando a linha de tendência e a linhahorizontal cruzam uma determinada cor. Decidi refazê-lo de forma a sinalizar quando a linha de tendência e a linha horizontal cruzam um certo estilo. Funcionou. Mas eu preciso dele para sinalizar quando uma linha de tendência cruza apenas a viga à direita. Entendo que tenho de acrescentar
OBJPROP_RAY_RIGHT
Boa tarde.
O Expert Advisor deve verificar as condições e abrir pedidos quando um novo bar aparece.
Recebi o erro" declarações defunção são permitidas somente em âmbito global, de espaço de nomes ou de classe". Traduziu-o em "declarações de função permitidas apenas em âmbito global, de espaço de nomes ou de classe".
Ainda não entendo, sou muito denso. Por favor, me diga ou me diga onde ler. Obrigado antecipadamente)
***