如何编码? - 页 327 1...320321322323324325326327328329330331332333334...347 新评论 tkuan77 2013.06.05 13:24 #3261 大家好,我在Stocastic的EA中遇到了这个特殊的错误。 我的标准是这样的。 当我的stocEquator交叉上升(上升趋势)时,当我的stocTrigger交叉上升时,只有多头会被触发;当stocEquator交叉下降(下降趋势)时,当stocTrigger交叉下降时只有空头 会被触发。 然而,当我运行EA进行测试时,没有触发任何交易,我想知道这里会有什么问题,如果有人能在这里帮助我,我会很感激。 谢谢你的帮助。 请注意 特伦斯 int isCrossedTrigger= 0; double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1) 。 double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1); double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2)。 double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2); double diff1Trigger= shortStoc1Trigger-longStoc1Trigger; double diff2Trigger= shortStoc2Trigger-longStoc2Trigger; 如果((diff1Trigger*diff2Trigger)<0) { 如果(shortStoc1Trigger>longStoc1Trigger) isCrossedTrigger= 1; 否则isCrossedTrigger= 2; } int isCrossedEquator = 0; double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1) 。 double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1); double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2); double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2); double diff1Equator = shortStoc1Equator-longStoc1Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; 如果((diff1Equator*diff2Equator)<0) { 如果(shortStoc1Equator>longStoc1Equator) isCrossedEquator = 1。 否则isCrossedEquator = 2。 } if(total < 2) { 如果(isCrossedTrigger==1 && isCrossedEquator==1) { 购买 } 如果(isCrossedTrigger== 2 && isCrossedEquator == 2) { 卖出 } return(0); } return(0); 编码帮助 初学者的问题 MQL4 MT4 MetaTrader ROSH先生: 以下这段代码是计算累计净多(空)单量的,加入到程序中后,程序不能交易,为何? Mladen Rakic 2013.06.05 21:26 #3262 tkuan77: 大家好,我在Stocastic上的EA有这个特殊的错误。 我的标准是这样的。当我的stocEquator交叉上升(上升趋势)时,当我的stocTrigger交叉上升时,只有多头会被触发;当stocEquator交叉下降(下降趋势)时,当stocTrigger交叉下降时,只有空头会被触发。然而,当我运行EA进行测试时,没有触发任何交易,我想知道这里会有什么问题,如果有人能在这里帮助我,我会很感激。谢谢你的帮助。请注意特伦斯int isCrossedTrigger= 0;double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1) 。double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;如果((diff1Trigger*diff2Trigger)<0){如果(shortStoc1Trigger>longStoc1Trigger)isCrossedTrigger= 1;否则isCrossedTrigger= 2;}int isCrossedEquator = 0;double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1) 。double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);double diff1Equator = shortStoc1Equator-longStoc1Equator;double diff2Equator = shortStoc2Equator-longStoc2Equator;如果((diff1Equator*diff2Equator)<0){如果(shortStoc1Equator>longStoc1Equator)isCrossedEquator = 1。否则isCrossedEquator = 2。}if(total < 2){如果(isCrossedTrigger==1 && isCrossedEquator==1){购买}如果(isCrossedTrigger==2 && isCrossedEquator ==2){卖出}return(0);} return(0); 特伦斯 我唯一不能检查的是 "总数 "变量。 如果total变量设置得当,该代码应该可以工作。这是我用你的条件做的测试指标,它发出了有效的买入和卖出信号(在视觉模式下运行指标,你会看到它何时发出警报),所以错误在其他地方 #property indicator_separate_window #property indicator_buffers 0 //------------------------------------------------------------------ // //------------------------------------------------------------------ int init() { return(0); } //------------------------------------------------------------------ // //------------------------------------------------------------------ int start() { int total = 0; int isCrossedTrigger= 0; double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1); double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ; double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2); double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ; double diff1Trigger = shortStoc1Trigger-longStoc1Trigger; double diff2Trigger = shortStoc2Trigger-longStoc2Trigger; if ((diff1Trigger*diff2Trigger)<0) { if (shortStoc1Trigger>longStoc1Trigger) isCrossedTrigger= 1; else isCrossedTrigger= 2; } int isCrossedEquator = 0; double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1); double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1); double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2); double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2); double diff1Equator = shortStoc1Equator-longStoc1Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; if ((diff1Equator*diff2Equator)<0) { if (shortStoc1Equator>longStoc1Equator) isCrossedEquator = 1; else isCrossedEquator = 2; } // // // // // if(total < 2) { if(isCrossedTrigger== 1 && isCrossedEquator == 1) { Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS)); } if(isCrossedTrigger== 2 && isCrossedEquator == 2) { Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS)); } } return(0); } 编码帮助 How to code? 請高手指教!!!關於修改程序!!! 請高手幫幫忙,急需中.... tkuan77 2013.06.06 17:15 #3263 嗨,mladen,谢谢你的强调。我回头看了一下我的代码,没有弄明白你说的 "总数 "变量是什么意思。我的错误可能是什么原因造成的? 请注意 特伦斯 //+------------------------------------------------------------------+ //| 我的第一份工作是什么? //| ǞǞǞ //|MetaTrader 4 交易平台 / MetaQuotes 软件公司。| //+------------------------------------------------------------------+ #财产版权 "TK" #property link "http://www.metaquotes.net" //---输入参数 extern double TakeProfit=500.0; extern double Lots=0.1; extern double StopLoss=500.0; //+------------------------------------------------------------------+ //| 专家初始化函数 | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家的去初始化功能| //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家启动功能| //+------------------------------------------------------------------+ datetime newbar。 int start() { 如果(newbar==Time[0])返回(0)。 否则newbar=Time[0]。 int ticket, total; 如果(Bars<100) { Print("小于100的条数")。 return(0); } 如果(TakeProfit<10) { Print("TakeProfit小于10")。 return(0); } //+------------------------------------------------------------------+ //|专家启动功能|随机触发器 //+------------------------------------------------------------------+ // shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); ///相关的Stoc运动 // longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); // orignial Stoc movement //+--------------------------------------------------------------------------------------+ //|专家启动功能|设置仅当线越过和蜡烛关闭时触发交易|// //+--------------------------------------------------------------------------------------+ int isCrossed = 0; double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1); double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1); double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2); double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2); double diff1 = shortStoc1-longStoc1; double diff2 = shortStoc2-longStoc2; 如果((diff1*diff2)<0) { 如果(shortStoc1>longStoc1) isCrossed = 1。 否则isCrossed = 2。 } // Equator Stoc Start ------------------------------------- int isCrossedEquator = 0; double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1); double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1); double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2); double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2); double diff1Equator = shortStoc1Equator-longStoc1Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; 如果((diff1Equator*diff2Equator)<0) { 如果(shortStoc1Equator>longStoc1Equator) isCrossedEquator = 1。 否则isCrossedEquator = 2。 } // Equator Stoc End ------------------------------------- //+------------------------------------------------------------------------------------+ //| expert end function | 设置仅当线段交叉且蜡烛关闭时触发交易 |// //+------------------------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| expert end function | Stochastic Trigger //+------------------------------------------------------------------+ //| experts start function | Trigger order //+------------------------------------------------------------------------------------------------------------+ total = OrdersTotal(); if(total < 2) //限制开启的交易数量 { 如果(isCrossed == 1 && isCrossedEquator == 1) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point, Ask+TakeProfit*Point, "My EA",12345,0,Green)。 如果(ticket>0) { 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } 否则 Print("打开BUY订单错误。",GetLastError())。 return(0); } 如果(isCrossed == 2 && isCrossedEquator == 2) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point, Bid-TakeProfit*Point, "My EA",12345,0,Red)。 如果(ticket>0) { 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Sell order opened : ",OrderOpenPrice()); } 否则 Print("打开卖出订单错误。",GetLastError())。 return(0); } return(0); } return(0); } //+------------------------------------------------------------------+ //| 专家级的终结函数 | //+------------------------------------------------------------------+ mladen: 特伦斯我唯一不能检查的是 "总数 "变量 如果总变量设置得当,代码应该可以工作。这是我用你的条件测试的指标,它发出了有效的买入和卖出信号(在视觉模式下运行指标,你会看到它何时发出警报),所以错误在其他地方。 #property indicator_separate_window #property indicator_buffers 0 //------------------------------------------------------------------ // //------------------------------------------------------------------ int init() { return(0); } //------------------------------------------------------------------ // //------------------------------------------------------------------ int start() { int total = 0; int isCrossedTrigger= 0; double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1); double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ; double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2); double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ; double diff1Trigger = shortStoc1Trigger-longStoc1Trigger; double diff2Trigger = shortStoc2Trigger-longStoc2Trigger; if ((diff1Trigger*diff2Trigger)<0) { if (shortStoc1Trigger>longStoc1Trigger) isCrossedTrigger= 1; else isCrossedTrigger= 2; } int isCrossedEquator = 0; double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1); double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1); double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2); double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2); double diff1Equator = shortStoc1Equator-longStoc1Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; if ((diff1Equator*diff2Equator)<0) { if (shortStoc1Equator>longStoc1Equator) isCrossedEquator = 1; else isCrossedEquator = 2; } // // // // // if(total < 2) { if(isCrossedTrigger== 1 && isCrossedEquator == 1) { Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS)); } if(isCrossedTrigger== 2 && isCrossedEquator == 2) { Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS)); } } return(0); } Help with Entry Criteria How to code? 原始想法 Mladen Rakic 2013.06.06 18:15 #3264 tkuan77: 嗨,mladen,谢谢你的强调。我回头看了一下我的代码,没有弄明白你说的 "总数 "变量是什么意思。我的错误可能是什么原因造成的?关于我们 特伦斯 //+------------------------------------------------------------------+ //| 尊敬的女士们、先生们、女士们: 你们好!欢迎来到我们的网站。 //| 尊敬的女士们、先生们、女士们: 大家好!我是来自北京的张先生。 //|MetaTrader 4 交易平台 / MetaQuotes 软件公司。| //+------------------------------------------------------------------+ #财产版权 "TK" #property link "http://www.metaquotes.net" //---输入参数 extern double TakeProfit=500.0; extern double Lots=0.1; extern double StopLoss=500.0; //+------------------------------------------------------------------+ //| 专家初始化函数 | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家的去初始化功能| //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家启动功能| //+------------------------------------------------------------------+ datetime newbar。 int start() { 如果(newbar==Time[0])返回(0)。 否则newbar=Time[0]。 int ticket, total; 如果(Bars<100) { Print("小于100的条数")。 return(0); } 如果(TakeProfit<10) { Print("TakeProfit小于10")。 return(0); } //+------------------------------------------------------------------+ //|专家启动功能|随机触发器 //+------------------------------------------------------------------+ // shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); ///相关的Stoc运动 // longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); // orignial Stoc movement //+--------------------------------------------------------------------------------------+ //|专家启动功能|设置仅当线越过和蜡烛关闭时触发交易|// //+--------------------------------------------------------------------------------------+ int isCrossed = 0; double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1); double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1); double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2); double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2); double diff1 = shortStoc1-longStoc1; double diff2 = shortStoc2-longStoc2; 如果((diff1*diff2)<0) { 如果(shortStoc1>longStoc1) isCrossed = 1。 否则isCrossed = 2。 } // Equator Stoc Start ------------------------------------- int isCrossedEquator = 0; double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1); double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1); double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2); double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2); double diff1Equator = shortStoc1Equator-longStoc1Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; 如果((diff1Equator*diff2Equator)<0) { 如果(shortStoc1Equator>longStoc1Equator) isCrossedEquator = 1。 否则isCrossedEquator = 2。 } // Equator Stoc End ------------------------------------- //+------------------------------------------------------------------------------------+ //| expert end function | 设置仅当线段交叉且蜡烛关闭时触发交易 |// //+------------------------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| expert end function | Stochastic Trigger //+------------------------------------------------------------------+ //| experts start function | Trigger order //+------------------------------------------------------------------------------------------------------------+ total = OrdersTotal(); if(total < 2) //限制开启的交易数量 { 如果(isCrossed == 1 && isCrossedEquator == 1) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point, Ask+TakeProfit*Point, "My EA",12345,0,Green)。 如果(ticket>0) { 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } 否则 Print("打开BUY订单错误。",GetLastError())。 return(0); } 如果(isCrossed == 2 && isCrossedEquator == 2) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point, Bid-TakeProfit*Point, "My EA",12345,0,Red)。 如果(ticket>0) { 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Sell order opened : ",OrderOpenPrice()); } 否则 Print("打开卖出订单错误。",GetLastError())。 return(0); } return(0); } return(0); } //+------------------------------------------------------------------+ //|专家结束功能| //+------------------------------------------------------------------+ 特伦斯 在我的测试中,该EA工作 以下是测试结果和回测报告。在1分钟的时间框架内测试 附加的文件: tk.zip 16 kb result.gif 13 kb Mastercash 2013.06.07 01:09 #3265 大家好,谁能帮我看看下面这段代码,,,,,它继续在每个tick上给我声音提示,而不是只有在交易所需的条件被触发时才有声音提示!我不希望在每个tick或新的蜡烛图形成时都有声音。我不希望在每个点或新的蜡烛图形成时发出警报。 #我不希望在每一个点或新的蜡烛图形成时发出警报。 #属性 indicator_buffers 2 #属性 indicator_color1 Lime #属性 Indicator_color2 Red //---- 输入参数 extern int ADXbars=14; extern int CountBars=350; //---- 缓冲区 double val1[]; double val2[]; double b4plusdi,nowplusdi,b4minusdi,nowminusdi; //+------------------------------------------------------------------+ //|自定义指标去初始化函数| //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|自定义指标迭代函数| //+------------------------------------------------------------------+ int init() { //--指标短名称 IndicatorShortName("PipsdatorPro1("+Symbol()+")")。 //---- 指标线 IndicatorBuffers(2); SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,233); SetIndexStyle(1,DRAW_ARROW); SetIndexArrow(1,234); SetIndexBuffer(0,val1); SetIndexBuffer(1,val2); //---- return(0); } //+------------------------------------------------------------------+ //| AltrTrend_Signal_v2_2 |/| //+------------------------------------------------------------------+ int start() { 如果(CountBars>=Bars) CountBars=Bars; SetIndexDrawBegin(0,Bars-CountBars); SetIndexDrawBegin(1,Bars-CountBars)。 int i,shift,counted_bars=IndicatorCounted()。 //----,检查可能的错误 if(counted_bars<0) return(-1); //---- 初始零点 如果(counted_bars<1) { for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0。 for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0。 } for (shift = CountBars; shift>=0; shift--) { b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1)。 nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift)。 b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1); nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift)。 如果(b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1) { val1[shift]=Low[shift]-5*Point; // Alert("Buy Arrow","\n", "Current time is",TimeToStr(CurTime()),"\n",Symbol())。 i++; } 如果(b4plusdinowminusdi && i!=1) { val2[shift]=High[shift]+5*Point。 // Alert("Sell Arrow","\n", "当前时间是",TimeToStr(CurTime()),"\n",Symbol())。 i++; } } 返回(0)。 } //+---------------------------------------------------------------+ [存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. How to code? [Archive!] Any rookie question, William Snyder 2013.06.07 01:41 #3266 Mastercash: 大家好,谁能帮我看看下面这段代码,,,,,它继续在每个tick上给我声音提示,而不是只有在交易所需的条件被触发时才有声音提示!我不想在每个tick或新的蜡烛图形成时都有声音提示。我不希望在每一个点或者在新的蜡烛图形成时发出警报。#属性 indicator_chart_window #属性 indicator_buffers 2 #属性 indicator_color1 Lime #属性 indicator_color2 Red //---- 输入参数 extern int ADXbars=14; extern int CountBars=350; //---- 缓冲区 double val1[]; double val2[]; double b4plusdi,nowplusdi,b4minusdi,nowminusdi; //+------------------------------------------------------------------+ //|自定义指标去初始化函数| //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|自定义指标迭代函数| //+------------------------------------------------------------------+ int init() { //--指标短名称 IndicatorShortName("PipsdatorPro1("+Symbol()+")")。 //---- 指标线 IndicatorBuffers(2); SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,233); SetIndexStyle(1,DRAW_ARROW); SetIndexArrow(1,234); SetIndexBuffer(0,val1); SetIndexBuffer(1,val2); //---- return(0); } //+------------------------------------------------------------------+ //| AltrTrend_Signal_v2_2 |/| //+------------------------------------------------------------------+ int start() { 如果(CountBars>=Bars) CountBars=Bars; SetIndexDrawBegin(0,Bars-CountBars); SetIndexDrawBegin(1,Bars-CountBars)。 int i,shift,counted_bars=IndicatorCounted()。 //----,检查可能的错误 if(counted_bars<0) return(-1); //---- 初始零点 如果(counted_bars<1) { for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0。 for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0。 } for (shift = CountBars; shift>=0; shift--) { b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1)。 nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift)。 b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1); nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift)。 如果(b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1) { val1[shift]=Low[shift]-5*Point; // Alert("Buy Arrow","\n", "Current time is",TimeToStr(CurTime()),"\n",Symbol())。 i++; } 如果(b4plusdinowminusdi && i!=1) { val2[shift]=High[shift]+5*Point。 // Alert("Sell Arrow","\n", "当前时间是",TimeToStr(CurTime()),"\n",Symbol())。 i++; } } 返回(0)。 } //+---------------------------------------------------------------+ Mastercash,这里有一个该指标的版本https://www.mql5.com/en/forum/173574/page320,也许 会有帮助。 tkuan77 2013.06.09 05:19 #3267 mladen: 特伦斯在我的测试中,该EA工作 这里是测试结果,加上后面的测试报告。在1分钟的时间框架内测试 嗨,mladen,我根据你的意见重新审查了代码,我注意到只有当我的两个stocastic线在同一蜡烛上向上或向下触发时,交易才会被触发。 然而,我想达到的目的是,如果赤道指标向上交叉表示上升趋势,EA将只 在快速指标向上触发时触发多头,反之亦然,而不是在同一根蜡烛上赤道和快速指标都向同一方向触发。 我曾试图调整EA以适应这一标准,但未能获得理想的结果。是不是我做错了什么?请帮助我。再次感谢。 谢谢 特伦斯 Mladen Rakic 2013.06.09 07:37 #3268 tkuan77: 你好,我根据你的意见重新审查了代码,我注意到只有当我的股价线在同一蜡烛上向上或向下触发时,交易才会被触发。 然而,我想达到的目的是,如果赤道指标向上交叉表示上升趋势,那么当快速指标向上触发时,EA将只触发多头,反之亦然,而不是在同一根蜡烛上让赤道和快速指标朝同一方向触发。 我曾试图调整EA以适应这一标准,但未能获得理想的结果。是不是我做错了什么?请帮助我。再次感谢。 谢谢 特伦斯 特伦斯 你可能需要写一个自定义的指标 来实现这个目标(在EA中,有些事情你根本无法用指标的方式来做)。 tkuan77 2013.06.09 08:34 #3269 mladen: Terrance 你可能需要写一个自定义的指标来完成这个任务(在EA中有些事情你根本无法用同样的方式来做指标)。 嗨,mladen,我不明白的是,为什么我可以用MA做这个,而不是iMA,尽管它是同一种标准?会不会是某种形式的指标设置? 谢谢 Terrance Mladen Rakic 2013.06.09 11:12 #3270 tkuan77: 你好,mladen,我不明白的是,为什么我可以用MA而不是iMA做这个,尽管它是同一种标准?会不会是某种形式的指标设置?观点 特伦斯 因为使用自定义指标,你可以保存两个点之间的状态(趋势),而当你使用iMA时,你不能(只是一个例子)。 1...320321322323324325326327328329330331332333334...347 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
大家好,我在Stocastic的EA中遇到了这个特殊的错误。
我的标准是这样的。
当我的stocEquator交叉上升(上升趋势)时,当我的stocTrigger交叉上升时,只有多头会被触发;当stocEquator交叉下降(下降趋势)时,当stocTrigger交叉下降时只有空头 会被触发。
然而,当我运行EA进行测试时,没有触发任何交易,我想知道这里会有什么问题,如果有人能在这里帮助我,我会很感激。
谢谢你的帮助。
请注意
特伦斯
int isCrossedTrigger= 0;
double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1) 。
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2)。
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;
如果((diff1Trigger*diff2Trigger)<0)
{
如果(shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
否则isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1) 。
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
如果((diff1Equator*diff2Equator)<0)
{
如果(shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1。
否则isCrossedEquator = 2。
}
if(total < 2)
{
如果(isCrossedTrigger==1 && isCrossedEquator==1)
{
购买
}
如果(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
卖出
}
return(0);
}
return(0);
大家好,我在Stocastic上的EA有这个特殊的错误。
我的标准是这样的。
当我的stocEquator交叉上升(上升趋势)时,当我的stocTrigger交叉上升时,只有多头会被触发;当stocEquator交叉下降(下降趋势)时,当stocTrigger交叉下降时,只有空头会被触发。
然而,当我运行EA进行测试时,没有触发任何交易,我想知道这里会有什么问题,如果有人能在这里帮助我,我会很感激。
谢谢你的帮助。
请注意
特伦斯
int isCrossedTrigger= 0;
double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1) 。
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;
如果((diff1Trigger*diff2Trigger)<0)
{
如果(shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
否则isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1) 。
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
如果((diff1Equator*diff2Equator)<0)
{
如果(shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1。
否则isCrossedEquator = 2。
}
if(total < 2)
{
如果(isCrossedTrigger==1 && isCrossedEquator==1)
{
购买
}
如果(isCrossedTrigger==2 && isCrossedEquator ==2)
{
卖出
}
return(0);
}
return(0);特伦斯
我唯一不能检查的是 "总数 "变量。
如果total变量设置得当,该代码应该可以工作。这是我用你的条件做的测试指标,它发出了有效的买入和卖出信号(在视觉模式下运行指标,你会看到它何时发出警报),所以错误在其他地方
#property indicator_buffers 0
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int init()
{
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int start()
{
int total = 0;
int isCrossedTrigger= 0;
double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;
double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;
double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
//
//
//
//
//
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
}
return(0);
}嗨,mladen,谢谢你的强调。我回头看了一下我的代码,没有弄明白你说的 "总数 "变量是什么意思。我的错误可能是什么原因造成的?
请注意
特伦斯
//+------------------------------------------------------------------+
//| 我的第一份工作是什么?
//| ǞǞǞ
//|MetaTrader 4 交易平台 / MetaQuotes 软件公司。|
//+------------------------------------------------------------------+
#财产版权 "TK"
#property link "http://www.metaquotes.net"
//---输入参数
extern double TakeProfit=500.0;
extern double Lots=0.1;
extern double StopLoss=500.0;
//+------------------------------------------------------------------+
//| 专家初始化函数 |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家的去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
datetime newbar。
int start()
{
如果(newbar==Time[0])返回(0)。
否则newbar=Time[0]。
int ticket, total;
如果(Bars<100)
{
Print("小于100的条数")。
return(0);
}
如果(TakeProfit<10)
{
Print("TakeProfit小于10")。
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|随机触发器
//+------------------------------------------------------------------+
// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); ///相关的Stoc运动
// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); // orignial Stoc movement
//+--------------------------------------------------------------------------------------+
//|专家启动功能|设置仅当线越过和蜡烛关闭时触发交易|//
//+--------------------------------------------------------------------------------------+
int isCrossed = 0;
double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
double diff1 = shortStoc1-longStoc1;
double diff2 = shortStoc2-longStoc2;
如果((diff1*diff2)<0)
{
如果(shortStoc1>longStoc1)
isCrossed = 1。
否则isCrossed = 2。
}
// Equator Stoc Start -------------------------------------
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
如果((diff1Equator*diff2Equator)<0)
{
如果(shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1。
否则isCrossedEquator = 2。
}
// Equator Stoc End -------------------------------------
//+------------------------------------------------------------------------------------+
//| expert end function | 设置仅当线段交叉且蜡烛关闭时触发交易 |//
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert end function | Stochastic Trigger
//+------------------------------------------------------------------+
//| experts start function | Trigger order
//+------------------------------------------------------------------------------------------------------------+
total = OrdersTotal();
if(total < 2) //限制开启的交易数量
{
如果(isCrossed == 1 && isCrossedEquator == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point, Ask+TakeProfit*Point,
"My EA",12345,0,Green)。
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
否则 Print("打开BUY订单错误。",GetLastError())。
return(0);
}
如果(isCrossed == 2 && isCrossedEquator == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point, Bid-TakeProfit*Point,
"My EA",12345,0,Red)。
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Sell order opened : ",OrderOpenPrice());
}
否则 Print("打开卖出订单错误。",GetLastError())。
return(0);
}
return(0);
}
return(0);
}
//+------------------------------------------------------------------+
//| 专家级的终结函数 |
//+------------------------------------------------------------------+
特伦斯
我唯一不能检查的是 "总数 "变量
如果总变量设置得当,代码应该可以工作。这是我用你的条件测试的指标,它发出了有效的买入和卖出信号(在视觉模式下运行指标,你会看到它何时发出警报),所以错误在其他地方。
#property indicator_buffers 0
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int init()
{
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int start()
{
int total = 0;
int isCrossedTrigger= 0;
double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;
double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;
double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
//
//
//
//
//
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
}
return(0);
}嗨,mladen,谢谢你的强调。我回头看了一下我的代码,没有弄明白你说的 "总数 "变量是什么意思。我的错误可能是什么原因造成的?
关于我们
特伦斯
//+------------------------------------------------------------------+
//| 尊敬的女士们、先生们、女士们: 你们好!欢迎来到我们的网站。
//| 尊敬的女士们、先生们、女士们: 大家好!我是来自北京的张先生。
//|MetaTrader 4 交易平台 / MetaQuotes 软件公司。|
//+------------------------------------------------------------------+
#财产版权 "TK"
#property link "http://www.metaquotes.net"
//---输入参数
extern double TakeProfit=500.0;
extern double Lots=0.1;
extern double StopLoss=500.0;
//+------------------------------------------------------------------+
//| 专家初始化函数 |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家的去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
datetime newbar。
int start()
{
如果(newbar==Time[0])返回(0)。
否则newbar=Time[0]。
int ticket, total;
如果(Bars<100)
{
Print("小于100的条数")。
return(0);
}
如果(TakeProfit<10)
{
Print("TakeProfit小于10")。
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|随机触发器
//+------------------------------------------------------------------+
// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); ///相关的Stoc运动
// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); // orignial Stoc movement
//+--------------------------------------------------------------------------------------+
//|专家启动功能|设置仅当线越过和蜡烛关闭时触发交易|//
//+--------------------------------------------------------------------------------------+
int isCrossed = 0;
double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
double diff1 = shortStoc1-longStoc1;
double diff2 = shortStoc2-longStoc2;
如果((diff1*diff2)<0)
{
如果(shortStoc1>longStoc1)
isCrossed = 1。
否则isCrossed = 2。
}
// Equator Stoc Start -------------------------------------
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
如果((diff1Equator*diff2Equator)<0)
{
如果(shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1。
否则isCrossedEquator = 2。
}
// Equator Stoc End -------------------------------------
//+------------------------------------------------------------------------------------+
//| expert end function | 设置仅当线段交叉且蜡烛关闭时触发交易 |//
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert end function | Stochastic Trigger
//+------------------------------------------------------------------+
//| experts start function | Trigger order
//+------------------------------------------------------------------------------------------------------------+
total = OrdersTotal();
if(total < 2) //限制开启的交易数量
{
如果(isCrossed == 1 && isCrossedEquator == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point, Ask+TakeProfit*Point,
"My EA",12345,0,Green)。
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
否则 Print("打开BUY订单错误。",GetLastError())。
return(0);
}
如果(isCrossed == 2 && isCrossedEquator == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point, Bid-TakeProfit*Point,
"My EA",12345,0,Red)。
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Sell order opened : ",OrderOpenPrice());
}
否则 Print("打开卖出订单错误。",GetLastError())。
return(0);
}
return(0);
}
return(0);
}
//+------------------------------------------------------------------+
//|专家结束功能|
//+------------------------------------------------------------------+特伦斯
在我的测试中,该EA工作
以下是测试结果和回测报告。在1分钟的时间框架内测试
大家好,谁能帮我看看下面这段代码,,,,,它继续在每个tick上给我声音提示,而不是只有在交易所需的条件被触发时才有声音提示!我不希望在每个tick或新的蜡烛图形成时都有声音。我不希望在每个点或新的蜡烛图形成时发出警报。
#我不希望在每一个点或新的蜡烛图形成时发出警报。
#属性 indicator_buffers 2
#属性 indicator_color1 Lime
#属性 Indicator_color2 Red
//---- 输入参数
extern int ADXbars=14;
extern int CountBars=350;
//---- 缓冲区
double val1[];
double val2[];
double b4plusdi,nowplusdi,b4minusdi,nowminusdi;
//+------------------------------------------------------------------+
//|自定义指标去初始化函数|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
int init()
{
//--指标短名称
IndicatorShortName("PipsdatorPro1("+Symbol()+")")。
//---- 指标线
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,234);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2 |/|
//+------------------------------------------------------------------+
int start()
{
如果(CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars);
SetIndexDrawBegin(1,Bars-CountBars)。
int i,shift,counted_bars=IndicatorCounted()。
//----,检查可能的错误
if(counted_bars<0) return(-1);
//---- 初始零点
如果(counted_bars<1)
{
for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0。
for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0。
}
for (shift = CountBars; shift>=0; shift--)
{
b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1)。
nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift)。
b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);
nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift)。
如果(b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)
{
val1[shift]=Low[shift]-5*Point;
// Alert("Buy Arrow","\n", "Current time is",TimeToStr(CurTime()),"\n",Symbol())。
i++;
}
如果(b4plusdinowminusdi && i!=1)
{
val2[shift]=High[shift]+5*Point。
// Alert("Sell Arrow","\n", "当前时间是",TimeToStr(CurTime()),"\n",Symbol())。
i++;
}
}
返回(0)。
}
//+---------------------------------------------------------------+
大家好,谁能帮我看看下面这段代码,,,,,它继续在每个tick上给我声音提示,而不是只有在交易所需的条件被触发时才有声音提示!我不想在每个tick或新的蜡烛图形成时都有声音提示。我不希望在每一个点或者在新的蜡烛图形成时发出警报。
#属性 indicator_chart_window
#属性 indicator_buffers 2
#属性 indicator_color1 Lime
#属性 indicator_color2 Red
//---- 输入参数
extern int ADXbars=14;
extern int CountBars=350;
//---- 缓冲区
double val1[];
double val2[];
double b4plusdi,nowplusdi,b4minusdi,nowminusdi;
//+------------------------------------------------------------------+
//|自定义指标去初始化函数|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
int init()
{
//--指标短名称
IndicatorShortName("PipsdatorPro1("+Symbol()+")")。
//---- 指标线
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,234);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2 |/|
//+------------------------------------------------------------------+
int start()
{
如果(CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars);
SetIndexDrawBegin(1,Bars-CountBars)。
int i,shift,counted_bars=IndicatorCounted()。
//----,检查可能的错误
if(counted_bars<0) return(-1);
//---- 初始零点
如果(counted_bars<1)
{
for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0。
for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0。
}
for (shift = CountBars; shift>=0; shift--)
{
b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1)。
nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift)。
b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);
nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift)。
如果(b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)
{
val1[shift]=Low[shift]-5*Point;
// Alert("Buy Arrow","\n", "Current time is",TimeToStr(CurTime()),"\n",Symbol())。
i++;
}
如果(b4plusdinowminusdi && i!=1)
{
val2[shift]=High[shift]+5*Point。
// Alert("Sell Arrow","\n", "当前时间是",TimeToStr(CurTime()),"\n",Symbol())。
i++;
}
}
返回(0)。
}
//+---------------------------------------------------------------+Mastercash,这里有一个该指标的版本https://www.mql5.com/en/forum/173574/page320,也许 会有帮助。
特伦斯
在我的测试中,该EA工作
这里是测试结果,加上后面的测试报告。在1分钟的时间框架内测试嗨,mladen,我根据你的意见重新审查了代码,我注意到只有当我的两个stocastic线在同一蜡烛上向上或向下触发时,交易才会被触发。
然而,我想达到的目的是,如果赤道指标向上交叉表示上升趋势,EA将只 在快速指标向上触发时触发多头,反之亦然,而不是在同一根蜡烛上赤道和快速指标都向同一方向触发。
我曾试图调整EA以适应这一标准,但未能获得理想的结果。是不是我做错了什么?请帮助我。再次感谢。
谢谢
特伦斯
你好,我根据你的意见重新审查了代码,我注意到只有当我的股价线在同一蜡烛上向上或向下触发时,交易才会被触发。
然而,我想达到的目的是,如果赤道指标向上交叉表示上升趋势,那么当快速指标向上触发时,EA将只触发多头,反之亦然,而不是在同一根蜡烛上让赤道和快速指标朝同一方向触发。
我曾试图调整EA以适应这一标准,但未能获得理想的结果。是不是我做错了什么?请帮助我。再次感谢。
谢谢
特伦斯特伦斯
你可能需要写一个自定义的指标 来实现这个目标(在EA中,有些事情你根本无法用指标的方式来做)。
Terrance 你可能需要写一个自定义的指标来完成这个任务(在EA中有些事情你根本无法用同样的方式来做指标)。
嗨,mladen,我不明白的是,为什么我可以用MA做这个,而不是iMA,尽管它是同一种标准?会不会是某种形式的指标设置?
谢谢
Terrance
你好,mladen,我不明白的是,为什么我可以用MA而不是iMA做这个,尽管它是同一种标准?会不会是某种形式的指标设置?
观点
特伦斯因为使用自定义指标,你可以保存两个点之间的状态(趋势),而当你使用iMA时,你不能(只是一个例子)。