编码帮助 - 页 395

 

EA没有开出反仓

嗨,MQL编码员。

我有一个关于我的EA的错误的问题。似乎没有打开一个反趋势头寸(见所附的截图)。

它正在关闭交易,但它没有打开一个新的交易,以遵循新给定的趋势方向。

// 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:
亲爱的Mladen

是否可以像这个帖子中那样在所附的指标中 "添加波段":https://www.mql5.com/en/forum/172894/page45

该指标来自精英部分,但我喜欢你在上面添加波段的方式。

谢谢你的帮助

秘密代码

秘密代码

这里有一个添加了波段的版本:ema_variation__filter_amp_bands_amp_mtf.ex4

附加的文件:
 
mladen:
secretcode 这里有一个添加了波段的版本:ema_variation__filter_amp_bands_amp_mtf.ex4

谢谢你Mladen 我真的很感谢你的专业知识

真诚的

秘密代码

 
tfi_markets:
嗨,MQL编码员。

我有一个关于我的EA中的一个错误的问题。似乎不能打开一个反趋势头寸(见所附截图)。

它正在关闭交易,但它没有打开一个新的交易来跟随新的给定趋势方向。

// 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

试着将两个中断语句向上移动一行(在"}"内)。

 

你好,Mladen。

请您告诉我这段代码哪里出了问题。

附上指标All Pivots,我把它改成也显示前一天的开盘线、前一天的收盘线和当天的开盘线。

但该指标并不一致。它总是正确显示枢轴,但很少显示我添加的每日开盘、前日开盘和收盘线的代码。

我不明白为什么,代码看起来和枢轴代码一样,所以它应该全部显示,有时会显示,但并不总是。我做错了什么,但不确定是什么。

非常感谢

PG

allpivots_daily.mq4

附加的文件:
 
pgtips:
你好,Mladen。

你能不能告诉我,我的这段代码哪里出错了。

附上指标All Pivots,我重新设计了它,也显示前一天的开盘线、前一天的收盘线和当天的开盘线。

但该指标并不一致。它总是正确显示枢轴,但很少显示我添加的每日开盘、前日开盘和收盘线的代码。

我不明白为什么,代码看起来和枢轴代码一样,所以它应该全部显示,有时会显示,但并不总是。我做错了什么,但不确定是什么。

非常感谢

PG

所有的枢轴_日报.mq4

PG

它工作得很好(见创建的对象列表)。检查是否有重叠的价格(这可能导致一些线不可见)。

另外,不要忘了在ObjectDel()函数中也添加你新创建的行。

附加的文件:
objects.gif  49 kb
 

谢谢Mladen,我一直在检查,它似乎对""内的行名很挑剔,这不是我所期望的。

像往常一样,感谢你的时间和帮助。

PG

mladen:
PG

工作正常(见所创建对象的列表)。检查是否有重叠的价格(这可能导致一些线不可见)

 
pgtips:
谢谢Mladen,我一直在检查,它似乎对""内的行名很挑剔,这不是我期望的。

像往常一样,感谢你的时间和帮助。

PG

对象的名称必须是唯一的--但就我所见,你已经解决了这个问题。

 

请帮助我解决这个问题https://www.mql5.com/en/forum/174385/page263

 

谢谢你,Mladen。

我有一个问题,就是:

我的第一个信号是在最后一次卖出后买入的,我需要它是在条形图收于阻力位或代码的 "srUp "之后

卖出信号也是如此,必须是在支撑位或 "srDown "以下收盘。

我怎样才能在代码中解决这个问题?

第二,就是之前问的那个问题,我怎么能在我的代码中修复,以不同的颜色显示卖出后的第一个买入信号呢?

#property strict

#属性 indicator_chart_window

#属性 indicator_buffers 4

#属性 indicator_color1 clrLime

#属性 indicator_color2 clrRed

#属性 indicator_color3 clrMagenta

#属性 indicator_color4 clrCyan

#define BUY 1

#define SELL 2

双重Buy[]。

卖出[]。

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)。

返回(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(rate_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, "Support and Resistance (Barry)",0,x)。

srDownH1 = iCustom(NULL,PERIOD_H1, "支持和阻力(巴里)",1,x)。

MidH1 = (srUpH1+srDownH1)/2,

srUp15M = iCustom(NULL,PERIOD_M15, "Support and Resistance (Barry)",0,y)。

srDown15M = iCustom(NULL,PERIOD_M15, "Support and Resistance (Barry)",1,y)。

Mid15M = (srUp15M+srDown15M)/2,

srUp5M = iCustom(NULL,PERIOD_M5, "Support and Resistance (Barry)",0,z)。

srDown5M = iCustom(NULL,PERIOD_M5, "支持和阻力(巴里)",1,z)。

Mid5M = (srUp5M+srDown5M)/2,

srUp = iCustom(NULL,0, "Support and Resistance (Barry)",0,i)。

srDown = iCustom(NULL,0, "Support and Resistance (Barry)",1,i)。

if(ClosesrUp) { // 第一个买入信号

Buy=Low-_Point; }

否则 {

Buy=EMPTY_VALUE; }

if(Close>Mid5M && Close>srUp) { //第二个信号买入

Buy=Low-_Point; }

否则 {

Buy=EMPTY_VALUE; }

if(Close>MidH4 && Close>Mid15M && Close<srDown) { // 第一个信号卖出

Sell=High+_Point; }

否则 {

Sell=EMPTY_VALUE; }

if(Close<Mid5M && Close<srDown) { // 第二个信号卖出

Sell=High+_Point; }

否则 {

Sell=EMPTY_VALUE; }}

return(rate_total);}

这就是我的警报,我应该使用它还是使用Alert( t("text for pop up"))?

void SoundAlert(datetime i, string dir) {

static datetime lastAlert=0;

if(lastAlert!=i) {

Alert(StringFormat("%s signal on %s at %s",dir,Symbol(),TimeToStr(i))。

lastAlert=i;}}

谢谢你 mladen

附加的文件:
signals.png  31 kb
原因: