深入了解Asctrend指标 - 页 4 12345 新评论 Sergey Golubev 2013.04.01 11:55 #31 从这个CodeBase链接的 时钟指标。顺便说一句,这个指标的本地时间是电脑时间(我的电脑时间),而不是我的本地时间 :)所以,这个指标显示的是。GMT时间、经纪人时间和你的电脑时间 Alain Verleyen 2013.04.01 12:07 #32 newdigital:从这个CodeBase链接的 时钟指标。顺便说一句,这个指标的本地时间是电脑时间(我的电脑时间),而不是我的本地时间 :)所以,这个指标显示的是。GMT时间、经纪人时间和你的电脑时间 你的电脑不是按你的本地时间设置的?为什么,为了交易? Sergey Golubev 2013.04.01 12:32 #33 不是为了交易。我只是忘了设置它 :)我的本地时间是GMT+3( 所有国家的夏令时 都是禁用的,但无论如何--我从未在夏令时上改变过我的电脑时钟)。 Alain Verleyen 2013.04.03 09:35 #34 很好,回到 Asctrend。如前所述,Asctrend是基于WPR指标的。Asctrend只有一个输入参数:风险。该参数用于定义WPR周期和 卖出/买入水平。风险的 "历史 "默认值是3(在Asctrend中是4,不知道为什么)。Asctrend WPR Period = 3 + RISK * 2 = 9 by default.Asctrend WPR buy level > - (33 - RISK) sell level < - (67 + RISK)对缺口和峰值也有一些异常处理。如果已经有相同方向的信号存在,还可以对信号进行内部过滤。 Mehrdad Shiri 2013.04.13 10:13 #35 ASCtrend(对其设置警报)。嗨;你能帮助我吗?我想在 "ASCtrend "指标上设置警报;(当前一根蜡烛上出现信号时,随着新蜡烛的开始而发出警报)。添加高亮的线条。//+------------------------------------------------------------------+ //| ASCtrend.mq5 | //| Copyright © 2011, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin" #property link "farria@mail.redcom.ru" #property description "ASCtrend" //---- indicator version #property version "1.00" //---- drawing the indicator in the main window #property indicator_chart_window //---- two buffers are used for calculation and drawing the indicator #property indicator_buffers 2 //---- only two plots are used #property indicator_plots 2 //+----------------------------------------------+ //| Bearish indicator drawing parameters | //+----------------------------------------------+ //---- drawing the indicator 1 as a symbol #property indicator_type1 DRAW_ARROW //---- magenta color is used as the color of the bearish indicator line #property indicator_color1 Magenta //---- thickness of the indicator 1 line is equal to 4 #property indicator_width1 4 //---- bullish indicator label display #property indicator_label1 "ASCtrend Sell" //+----------------------------------------------+ //| Bullish indicator drawing parameters | //+----------------------------------------------+ //---- drawing the indicator 2 as a symbol #property indicator_type2 DRAW_ARROW //---- blue color is used as the color of a bullish candlestick #property indicator_color2 Blue //---- thickness of the indicator 2 line is equal to 4 #property indicator_width2 4 //---- bearish indicator label display #property indicator_label2 "ASCtrend Buy" #define RESET 0 // The constant for getting the command for the indicator recalculation back to the terminal //+----------------------------------------------+ //| Indicator input parameters | //+----------------------------------------------+ input int RISK=4; //+----------------------------------------------+ //---- declaration of dynamic arrays that further // will be used as indicator buffers double SellBuffer[]; double BuyBuffer[]; //---- int StartBars,x1,x2,value10,value11,WPR_Handle[3]; //+------------------------------------------------------------------+ extern bool SoundON=true; //Alert extern bool EmailON=true;//false; //Email extern bool PushON=true; //Allow to send a signal to the mobile input uint NumberofAlerts=10; uint counter=0; //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- initialization of global variables x1=67+RISK; x2=33-RISK; value10=2; value11=value10; StartBars=int(MathMax(3+RISK*2,4)+1); //---- getting handle of the iWPR 1 indicator WPR_Handle[0]=iWPR(NULL,0,3); if(WPR_Handle[0]==INVALID_HANDLE)Print(" Failed to get handle of the iWPR 1 indicator"); //---- getting handle of the iWPR 2 indicator WPR_Handle[1]=iWPR(NULL,0,4); if(WPR_Handle[1]==INVALID_HANDLE)Print(" Failed to get handle of the iWPR 2 indicator"); //---- getting handle of the iWPR 3 indicator WPR_Handle[2]=iWPR(NULL,0,3+RISK*2); if(WPR_Handle[2]==INVALID_HANDLE)Print(" Failed to get handle of the iWPR 3 indicator"); //---- set dynamic array as an indicator buffer SetIndexBuffer(0,SellBuffer,INDICATOR_DATA); //---- shifting the start of drawing the indicator 1 PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartBars); //---- create a label to display in DataWindow PlotIndexSetString(0,PLOT_LABEL,"ASCtrend Sell"); //---- indicator symbol PlotIndexSetInteger(0,PLOT_ARROW,108); //---- indexing the elements in the buffer as timeseries ArraySetAsSeries(SellBuffer,true); //---- setting values of the indicator that won't be visible on a chart PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); //---- set dynamic array as an indicator buffer SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA); //---- shifting the start of drawing the indicator 2 PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,StartBars); //---- create a label to display in DataWindow PlotIndexSetString(1,PLOT_LABEL,"ASCtrend Buy"); //---- indicator symbol PlotIndexSetInteger(1,PLOT_ARROW,108); //---- indexing the elements in the buffer as timeseries ArraySetAsSeries(BuyBuffer,true); //---- setting values of the indicator that won't be visible on a chart PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0); //---- Setting the format of accuracy of displaying the indicator IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //---- name for the data window and the label for tooltips string short_name="ASCtrend"; IndicatorSetString(INDICATOR_SHORTNAME,short_name); //---- } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { //---- checking the number of bars to be enough for the calculation if(BarsCalculated(WPR_Handle[0])<rates_total || BarsCalculated(WPR_Handle[1])<rates_total || BarsCalculated(WPR_Handle[2])<rates_total || rates_total<StartBars) return(RESET); //---- declarations of local variables int limit,bar,count,iii; double value2,value3,Vel=0,WPR[]; double TrueCount,Range,AvgRange,MRO1,MRO2; //---- calculations of the necessary amount of data to be copied and //the limit starting index for loop of bars recalculation if(prev_calculated>rates_total || prev_calculated<=0)// checking for the first start of the indicator calculation limit=rates_total-StartBars; // starting index for calculation of all bars else limit=rates_total-prev_calculated; // starting index for calculation of new bars //---- indexing elements in arrays as timeseries ArraySetAsSeries(WPR,true); ArraySetAsSeries(open,true); ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); ArraySetAsSeries(close,true); //---- main indicator calculation loop for(bar=limit; bar>=0 && !IsStopped(); bar--) { Range=0.0; AvgRange=0.0; for(count=bar; count<=bar+9; count++) AvgRange=AvgRange+MathAbs(high[count]-low[count]); Range=AvgRange/10; count=bar; TrueCount=0; while(count<bar+9 && TrueCount<1) { if(MathAbs(open[count]-close[count+1])>=Range*2.0) TrueCount++; count++; } if(TrueCount>=1) MRO1=count; else MRO1=-1; count=bar; TrueCount=0; while(count<bar+6 && TrueCount<1) { if(MathAbs(close[count+3]-close[count])>=Range*4.6) TrueCount++; count++; } if(TrueCount>=1) MRO2=count; else MRO2=-1; if(MRO1>-1) {value11=0;} else {value11=value10;} if(MRO2>-1) {value11=1;} else {value11=value10;} if(CopyBuffer(WPR_Handle[value11],0,bar,1,WPR)<=0) return(RESET); value2=100-MathAbs(WPR[0]); // PercentR(value11=9) SellBuffer[bar]=0; BuyBuffer[bar]=0; value3=0; if(value2<x2) { iii=1; while(bar+iii<rates_total) { if(CopyBuffer(WPR_Handle[value11],0,bar+iii,1,WPR)<=0) return(RESET); Vel=100-MathAbs(WPR[0]); if(Vel>=x2 && Vel<=x1) iii++; else break; } if(Vel>x1) { value3=high[bar]+Range*0.5; SellBuffer[bar]=value3; } } if(value2>x1) { iii=1; while(bar+iii<rates_total) { if(CopyBuffer(WPR_Handle[value11],0,bar+iii,1,WPR)<=0) return(RESET); Vel=100-MathAbs(WPR[0]); if(Vel>=x2 && Vel<=x1) iii++; else break; } if(Vel<x2) { value3=low[bar]-Range*0.5; BuyBuffer[bar]=value3; } } } //----------------------------------------------------------------------// Comment(" BuyBuffer[rates_total-4]=",BuyBuffer[rates_total-4]," DateTime[rates_total-4]=",time[rates_total-4] ,"\n BuyBuffer[rates_total-3]=",BuyBuffer[rates_total-3]," DateTime[rates_total-3]=",time[rates_total-3] ,"\n BuyBuffer[rates_total-2]=",BuyBuffer[rates_total-2]," DateTime[rates_total-2]=",time[rates_total-2] ,"\n BuyBuffer[rates_total-1]=",BuyBuffer[rates_total-1]," DateTime[rates_total-1]=",time[rates_total-1] ,"\n SellBuffer[rates_total-4]=",SellBuffer[rates_total-4]," DateTime[rates_total-4]=",time[rates_total-4] ,"\n SellBuffer[rates_total-3]=",SellBuffer[rates_total-3]," DateTime[rates_total-3]=",time[rates_total-3] ,"\n SellBuffer[rates_total-2]=",SellBuffer[rates_total-2]," DateTime[rates_total-2]=",time[rates_total-2] ,"\n SellBuffer[rates_total-1]=",SellBuffer[rates_total-1]," DateTime[rates_total-1]=",time[rates_total-1] ,"\n rates_total=",rates_total ,"\n prev_calculated=",prev_calculated ); //----------------------------------- //----------------------------------------------------------------------// MqlDateTime tm; double Ask,Bid; string text,sAsk,sBid,sPeriod; TimeToStruct(TimeCurrent(),tm); text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); Ask=close[0]; Bid=close[0]+spread[0]; sAsk=DoubleToString(Ask,_Digits); sBid=DoubleToString(Bid,_Digits); sPeriod=EnumToString(ChartPeriod()); if(rates_total!=prev_calculated) counter=0; if( BuyBuffer[rates_total-2]!=0 ) { if(counter<NumberofAlerts) { counter++; if(SoundON) { Alert("ASC_TREND BUY signal at Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); PlaySound("matrixrevolution.wav"); // PlaySound("SysAlert1.wav"); // PlaySound("samsam.wav"); // PlaySound("Alert_Play.wav"); } if(EmailON) SendMail("ASC_TREND : BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification("ASC_TREND: BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } } if(SellBuffer[rates_total-2]!=0 ) { if(counter<NumberofAlerts) { counter++; if(SoundON) { Alert("ASC_TREND SELL signal at Ask=",sAsk,"\n Bid=",sBid,"\n Date=",text,"\n Symbol=",Symbol()," Period=",sPeriod); PlaySound("matrixrevolution.wav"); // PlaySound("SysAlert1.wav"); // PlaySound("samsam.wav"); // PlaySound("Alert_Play.wav"); } if(EmailON) SendMail("ASC_TREND","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification("ASC_TREND: SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } } //----------------------------------------------------------------------// //---- return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Comment(""); ChartRedraw(); } //******************************************************************************************************************** //+------------------------------------------------------------------+ 有一个问题,它是不工作。 谢谢你。 附加的文件: ASCtrend_alarm.mq5 13 kb Alain Verleyen 2013.04.13 10:44 #36 TIMisthebest:ASCtrend(在上面设置警报)。嗨;你能帮助我吗?我想在 "ASCtrend "指标上设置警报;(当前一根蜡烛上出现信号时,随着新蜡烛的开始而发出警报)添加高亮线。有一个问题,它是不工作的。 谢谢你。你为什么用这个? if( BuyBuffer[rates_total-2]!=0 ) 把你的代码放在一个函数中。SendAlert(direction) {...}或类似的功能。并在检测到信号时调用这个函数。 if(Vel>x1) { value3=high[bar]+Range*0.5; SellBuffer[bar]=value3; SendAlert("sell"); } ... if(Vel<x2) { value3=low[bar]-Range*0.5; BuyBuffer[bar]=value3; SendAlert("buy"); } Mehrdad Shiri 2013.04.13 14:17 #37 angevoyageur:你为什么使用这个?将你的代码放在一个函数中。SendAlert(direction) {...}或类似的功能并在检测到信号时调用这个函数。所有权利。谢谢你。但在这种情况下,我在同一根蜡烛上有警报,而且可能是在蜡烛的末端(该蜡烛的时间);没有 "ASCtrend "的信号。我的意思是:如果在前一根蜡烛的末端有信号,就会发出警报。在 "ASCtrend_alarm_2 "中,用测试器可以看到{ value3 & BuyBuffer & SellBuffer }的值。从2013.04.10到2013.04.12你可以看到我的意思。如果我说错了,请告诉我。 附加的文件: ASCtrend_alarm_2.mq5 13 kb Alain Verleyen 2013.04.13 14:23 #38 TIMisthebest:所有的权利。谢谢你。但在这种情况下,我在同一根蜡烛上有警报,可能在蜡烛的末端(该蜡烛的时间);没有 "ASCtrend "的信号。我的意思是:如果在前一根蜡烛的末端有信号,就会发出警报。如果我说错了,请告诉我。 你是对的。你必须添加一个if语句,比如if(bar==1) Mehrdad Shiri 2013.04.13 17:43 #39 angevoyageur: 你是对的。你必须添加一个if语句,比如if(bar==1)在下面的图片中。我不明白为什么 "BuyBuffer "或 "SellBuffer "的值总是等于零。在mql文件中,我们有。 if(Vel>x1) { value3=high[bar]+Range*0.5; SellBuffer[bar]=value3; } ... ... ... if(Vel<x2) { value3=low[bar]-Range*0.5; BuyBuffer[bar]=value3; } 我们可以在测试器上检查一下(附件)。为什么这个总是等于零;当 "value3 "有另一个值时? 附加的文件: ASCtrend_alarm_2.mq5 13 kb Alain Verleyen 2013.04.13 18:50 #40 TIMisthebest:在下面的图片中。我不明白为什么 "BuyBuffer "或 "SellBuffer "的值总是等于零。在mql文件中,我们有。我们可以在测试器上检查一下(附件)。当 "value3 "有另一个值时,为什么这个值总是等于零?我已经跟你说过了。 if( BuyBuffer[rates_total-2]!=0 ) 不是很好。你知道下面这些是什么意思吗?//---- indexing the elements in the buffer as timeseries ArraySetAsSeries(BuyBuffer,true); 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
从这个CodeBase链接的 时钟指标。
顺便说一句,这个指标的本地时间是电脑时间(我的电脑时间),而不是我的本地时间 :)
所以,这个指标显示的是。GMT时间、经纪人时间和你的电脑时间
从这个CodeBase链接的 时钟指标。
顺便说一句,这个指标的本地时间是电脑时间(我的电脑时间),而不是我的本地时间 :)
所以,这个指标显示的是。GMT时间、经纪人时间和你的电脑时间
很好,回到 Asctrend。如前所述,Asctrend是基于WPR指标的。
Asctrend只有一个输入参数:风险。该参数用于定义WPR周期和 卖出/买入水平。风险的 "历史 "默认值是3(在Asctrend中是4,不知道为什么)。
Asctrend WPR Period = 3 + RISK * 2 = 9 by default.
Asctrend WPR buy level > - (33 - RISK)
sell level < - (67 + RISK)
对缺口和峰值也有一些异常处理。如果已经有相同方向的信号存在,还可以对信号进行内部过滤。
ASCtrend(对其设置警报)。
嗨;你能帮助我吗?
我想在 "ASCtrend "指标上设置警报;(当前一根蜡烛上出现信号时,随着新蜡烛的开始而发出警报)。
添加高亮的线条。
有一个问题,它是不工作。
谢谢你。ASCtrend(在上面设置警报)。
嗨;你能帮助我吗?
我想在 "ASCtrend "指标上设置警报;(当前一根蜡烛上出现信号时,随着新蜡烛的开始而发出警报)
添加高亮线。
有一个问题,它是不工作的。
谢谢你。你为什么用这个?
if( BuyBuffer[rates_total-2]!=0 )
把你的代码放在一个函数中。
SendAlert(direction) {...}或类似的功能。
并在检测到信号时调用这个函数。
你为什么使用这个?
将你的代码放在一个函数中。
SendAlert(direction) {...}或类似的功能
并在检测到信号时调用这个函数。
所有权利。
谢谢你。
但在这种情况下,我在同一根蜡烛上有警报,而且可能是在蜡烛的末端(该蜡烛的时间);没有 "ASCtrend "的信号。
我的意思是:如果在前一根蜡烛的末端有信号,就会发出警报。
在 "ASCtrend_alarm_2 "中,用测试器可以看到{ value3 & BuyBuffer & SellBuffer }的值。
从2013.04.10到2013.04.12你可以看到我的意思。
如果我说错了,请告诉我。
所有的权利。
谢谢你。
但在这种情况下,我在同一根蜡烛上有警报,可能在蜡烛的末端(该蜡烛的时间);没有 "ASCtrend "的信号。
我的意思是:如果在前一根蜡烛的末端有信号,就会发出警报。
如果我说错了,请告诉我。
你是对的。你必须添加一个if语句,比如if(bar==1)
在下面的图片中。
我不明白为什么 "BuyBuffer "或 "SellBuffer "的值总是等于零。
在mql文件中,我们有。
我们可以在测试器上检查一下(附件)。
为什么这个总是等于零;当 "value3 "有另一个值时?
在下面的图片中。
我不明白为什么 "BuyBuffer "或 "SellBuffer "的值总是等于零。
在mql文件中,我们有。
我们可以在测试器上检查一下(附件)。
当 "value3 "有另一个值时,为什么这个值总是等于零?
我已经跟你说过了。
if( BuyBuffer[rates_total-2]!=0 )
不是很好。
你知道下面这些是什么意思吗?