Помощь в кодировании - страница 395

 

Советник не открывает встречную позицию

Здравствуйте, 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;

}

}

}

}

Заранее спасибо!

 
secretcode:
Уважаемый Младен

Возможно ли "добавить полосу" в прикрепленный индикатор, как в этом сообщении: https: //www.mql5.com/en/forum/172894/page45.

Этот индикатор из элитного раздела, но мне нравится, как вы добавляете полосу на нем.

Спасибо за любую помощь

secretcode

secretcode

Вот версия с добавленными полосами : ema_variation__filter_amp_bands_amp_mtf.ex4

 
mladen:
secretcode Вот версия с добавленными полосами: ema_variation__filter_amp_bands_amp_mtf.ex4

Спасибо, Младен Я очень ценю вашу компетентность.

Искренне

secretcode

 
tfi_markets:
Здравствуйте, 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

Файлы:
 
pgtips:
Здравствуйте, Младен,

будьте добры, подскажите, где я ошибся с этим кодом.

Прикрепленный индикатор All Pivots, я переделал его, чтобы он также показывал линию открытия предыдущего дня, линию закрытия предыдущего дня и линию открытия текущего дня.

Но индикатор непоследователен. Он всегда правильно показывает развороты, но редко, если вообще показывает, добавленный мной код для линий открытия, закрытия и открытия предыдущего дня.

Я не понимаю почему, код выглядит так же, как и код разворотов, поэтому он должен показывать все, и иногда он показывает, но не всегда. Я сделал что-то не так, но не уверен, что именно.

Большое спасибо

PG

allpivots_daily.mq4

PG

Все работает нормально (см. список созданных объектов). Проверьте, нет ли перекрывающихся цен (это может привести к тому, что некоторые линии будут невидимыми).

Также не забудьте добавить вновь созданные строки в функцию ObjectDel().

Файлы:
objects.gif  49 kb
 

Спасибо, Младен, я продолжал проверять и, похоже, он придирчиво относится к именам строк внутри "", что не то, что я ожидал.

Как всегда, спасибо за ваше время и помощь,

PG

mladen:
PG

Все работает нормально (см. список созданных объектов). Проверьте, нет ли перекрывающихся цен (это может привести к тому, что некоторые линии будут невидимыми)

 
pgtips:
Спасибо, Младен, я продолжал проверять, и кажется, что он придирчив к именам строк внутри "", что не то, что я ожидаю.

Как всегда, спасибо за ваше время и помощь,

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;}}

спасибо младен

Файлы:
signals.png  31 kb