Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Советник не открывает встречную позицию
Здравствуйте, MQL Coders,
У меня вопрос по поводу ошибки в моем советнике. Похоже, что советник не открывает контртрендовую позицию (см. приложенный скриншот).
Он закрывает сделку, но не открывает новую сделку, чтобы следовать новому заданному направлению тренда.
// Indicator HMA NMC
double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
//+------------------------------------------------------------------+
//| BUY |
//+------------------------------------------------------------------+
if(trendc!=trendp)
{
if(trendc==1) // code for buy
OpenBuy();
return(0);
}
//+------------------------------------------------------------------+
//| SELL |
//+------------------------------------------------------------------+
if(trendc==-1) // code for sell
{
OpenSell();
return(0);
}
}
[/CODE]
[CODE]
void CheckForClose()
{
RefreshRates();
double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
for(int i=0;i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!= MAGIC) continue;
if(OrderSymbol() != s_symbol) continue;
//+-------------------------------------------------------------------------------+
//| Close BUY |
//+-------------------------------------------------------------------------------+
if(trendc_c!=trendp_c) // Check trend
{
if(OrderType()==OP_BUY)
{
if(trendc_c==-1) //is buy?
{
bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy);
if(buyClose==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts == true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
//+--------------------------------------------------------------------------------+
//| Close SELL |
//+--------------------------------------------------------------------------------+
if(trendc_c!=trendp_c)
{
if(OrderType()==OP_SELL)
{
if(trendc_c==1) // SELL
{
bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell);
if(sellClose == false)
{
ErrorCode = GetLastError();
ErrDesc = ErrorDescription(ErrorCode);
ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
}
}
Заранее спасибо!
Уважаемый Младен
Возможно ли "добавить полосу" в прикрепленный индикатор, как в этом сообщении: https: //www.mql5.com/en/forum/172894/page45.
Этот индикатор из элитного раздела, но мне нравится, как вы добавляете полосу на нем.
Спасибо за любую помощь
secretcodesecretcode
Вот версия с добавленными полосами : ema_variation__filter_amp_bands_amp_mtf.ex4
secretcode Вот версия с добавленными полосами: ema_variation__filter_amp_bands_amp_mtf.ex4
Спасибо, Младен Я очень ценю вашу компетентность.
Искренне
secretcode
Здравствуйте, MQL-кодеры,
У меня вопрос по поводу ошибки в моем советнике. Похоже, что советник не может открыть позицию против тренда (см. приложенный скриншот).
Он закрывает сделку, но не открывает новую сделку, чтобы следовать новому заданному направлению тренда.
// Indicator HMA NMC
double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
//+------------------------------------------------------------------+
//| BUY |
//+------------------------------------------------------------------+
if(trendc!=trendp)
{
if(trendc==1) // code for buy
OpenBuy();
return(0);
}
//+------------------------------------------------------------------+
//| SELL |
//+------------------------------------------------------------------+
if(trendc==-1) // code for sell
{
OpenSell();
return(0);
}
}
[/CODE]
[CODE]
void CheckForClose()
{
RefreshRates();
double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
for(int i=0;i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!= MAGIC) continue;
if(OrderSymbol() != s_symbol) continue;
//+-------------------------------------------------------------------------------+
//| Close BUY |
//+-------------------------------------------------------------------------------+
if(trendc_c!=trendp_c) // Check trend
{
if(OrderType()==OP_BUY)
{
if(trendc_c==-1) //is buy?
{
bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy);
if(buyClose==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts == true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
//+--------------------------------------------------------------------------------+
//| Close SELL |
//+--------------------------------------------------------------------------------+
if(trendc_c!=trendp_c)
{
if(OrderType()==OP_SELL)
{
if(trendc_c==1) // SELL
{
bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell);
if(sellClose == false)
{
ErrorCode = GetLastError();
ErrDesc = ErrorDescription(ErrorCode);
ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
}
}
tfi_markets
Попробуйте переместить оба оператора break на одну строку вверх (чтобы они были внутри "}").
Здравствуйте, Младен,
будьте добры, подскажите, где я ошибся с этим кодом.
Прилагаю индикатор All Pivots, я переделал его, чтобы он также показывал линию открытия предыдущего дня, линию закрытия предыдущего дня и линию открытия текущего дня.
Но индикатор непоследователен. Он всегда правильно показывает развороты, но редко, если вообще показывает, добавленный мной код для линий открытия, закрытия и открытия предыдущего дня.
Я не понимаю почему, код выглядит так же, как и код разворотов, поэтому он должен показывать все, и иногда он показывает, но не всегда. Я сделал что-то не так, но не уверен, что именно.
Большое спасибо
PG
allpivots_daily.mq4
Здравствуйте, Младен,
будьте добры, подскажите, где я ошибся с этим кодом.
Прикрепленный индикатор All Pivots, я переделал его, чтобы он также показывал линию открытия предыдущего дня, линию закрытия предыдущего дня и линию открытия текущего дня.
Но индикатор непоследователен. Он всегда правильно показывает развороты, но редко, если вообще показывает, добавленный мной код для линий открытия, закрытия и открытия предыдущего дня.
Я не понимаю почему, код выглядит так же, как и код разворотов, поэтому он должен показывать все, и иногда он показывает, но не всегда. Я сделал что-то не так, но не уверен, что именно.
Большое спасибо
PG
allpivots_daily.mq4PG
Все работает нормально (см. список созданных объектов). Проверьте, нет ли перекрывающихся цен (это может привести к тому, что некоторые линии будут невидимыми).
Также не забудьте добавить вновь созданные строки в функцию ObjectDel().
Спасибо, Младен, я продолжал проверять и, похоже, он придирчиво относится к именам строк внутри "", что не то, что я ожидал.
Как всегда, спасибо за ваше время и помощь,
PG
PG
Все работает нормально (см. список созданных объектов). Проверьте, нет ли перекрывающихся цен (это может привести к тому, что некоторые линии будут невидимыми)
Спасибо, Младен, я продолжал проверять, и кажется, что он придирчив к именам строк внутри "", что не то, что я ожидаю.
Как всегда, спасибо за ваше время и помощь,
PGИмена объектов всегда должны быть уникальными - но, насколько я видел, вы позаботились об этом.
Пожалуйста, помогите мне с этим https://www.mql5.com/en/forum/174385/page263
Спасибо, Младен,
У меня есть проблема, и она заключается в следующем:
мой первый сигнал на покупку после последней продажи, мне нужно, чтобы он был после закрытия бара выше сопротивления или "srUp" кода
То же самое для продажи, бар должен быть закрыт ниже поддержки или "srDown".
Как я могу исправить это в коде?
И второй вопрос, который был задан ранее под номером один, как я могу исправить в коде, чтобы первый сигнал buy после sell показывался разным цветом?
#property strict
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 clrLime
#property indicator_color2 clrRed
#property indicator_color3 clrMagenta
#property indicator_color4 clrCyan
#define BUY 1
#define SELL 2
double Buy[],
Sell[],
FirstBuy[],
FirstSell[];
int OnInit() {
SetIndexBuffer(0,FirstBuy);
SetIndexBuffer(1,FirstSell);
SetIndexBuffer(2,Buy);
SetIndexBuffer(3,Sell);
for(int i=0; i<4; i++) {
SetIndexStyle (i,DRAW_ARROW,STYLE_SOLID,2);}
SetIndexArrow (0,233);
SetIndexArrow (1,234);
SetIndexArrow (2,233);
SetIndexArrow (3,234);
return(INIT_SUCCEEDED);}
void OnDeinit(const int reason) {}
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[],
const double &open[], const double &high[], const double &low[],
const double &close[], const long &tick_volume[], const long &volume[],
const int &spread[]) {
static int lastSignal=0;
for(int i=MathMin(rates_total-prev_calculated, rates_total-1); i>=0; i--) {
FirstBuy=FirstSell=Buy=Sell=EMPTY_VALUE;
datetime when=Time;
int w=iBarShift(NULL,PERIOD_H4, when),
x=iBarShift(NULL,PERIOD_H1, when),
y=iBarShift(NULL,PERIOD_M15, when),
z=iBarShift(NULL,PERIOD_M5, when);
double srUpH4 = iCustom(NULL,PERIOD_H4, "Support and Resistance (Barry)",0,w),
srDownH4 = iCustom(NULL,PERIOD_H4, "Поддержка и сопротивление (Барри)",1,w),
MidH4 = (srUpH4+srDownH4)/2,
srUpH1 = iCustom(NULL,PERIOD_H1, "Поддержка и сопротивление (Барри)",0,x),
srDownH1 = iCustom(NULL,PERIOD_H1, "Поддержка и сопротивление (Барри)",1,x),
MidH1 = (srUpH1+srDownH1)/2,
srUp15M = iCustom(NULL,PERIOD_M15, "Поддержка и сопротивление (Барри)",0,y),
srDown15M = iCustom(NULL,PERIOD_M15, "Поддержка и сопротивление (Барри)",1,y),
Mid15M = (srUp15M+srDown15M)/2,
srUp5M = iCustom(NULL,PERIOD_M5, "Поддержка и сопротивление (Барри)",0,z),
srDown5M = iCustom(NULL,PERIOD_M5, "Поддержка и сопротивление (Барри)",1,z),
Mid5M = (srUp5M+srDown5M)/2,
srUp = iCustom(NULL,0, "Поддержка и сопротивление (Барри)",0,i),
srDown = iCustom(NULL,0, "Поддержка и сопротивление (Барри)",1,i);
if(ClosesrUp) { // первый сигнал на покупку
Buy=Low-_Point; }
else {
Buy=EMPTY_VALUE; }
if(Close>Mid5M && Close>srUp) { // второй сигнал buy
Buy=Low-_Point; }
else {
Buy=EMPTY_VALUE; }
if(Close>MidH4 && Close>Mid15M && Close<srDown) { // первый сигнал sell
Sell=High+_Point; }
else {
Sell=EMPTY_VALUE; }
if(Close<Mid5M && Close<srDown) { // второй сигнал sell
Sell=High+_Point; }
else {
Sell=EMPTY_VALUE; }}
return(rates_total);}
вот что у меня есть для оповещений, мне использовать это или вместо этого использовать Alert( t("текст для всплывающего окна"))?
void SoundAlert(datetime i, string dir) {
static datetime lastAlert=0;
if(lastAlert!=i) {
Alert(StringFormat("%s сигнал на %s в %s",dir,Symbol(),TimeToStr(i)));
lastAlert=i;}}
спасибо младен