论坛全局菜单下方 - TICKMILL 285X70论坛全局菜单下方 - ThinkMarkets285X70论坛全局菜单下方 - 荔枝返现285X70论坛全局菜单下方 -  icmarkets285X70
查看:1298回复:0
草龙
注册时间2004-12-17
[MT4指标]突破报警指标
楼主发表于:2014-10-19 23:19只看该作者倒序浏览
1楼 电梯直达
电梯直达
主图指标 mt4指标类型:震荡指标 是否能用在mt4手机版上:否 是否含有未来函数:无 //+------------------------------------------------------------------+ //| Chin Breakout Alert.mq4 | //| Copyright ? 2007, MetaQuotes Software Corp. | //| Instructions for use // | are in this video:http://www.youtube.com/watch?v=5Ds1BZl78xQ //+------------------------------------------------------------------+ #property copyright \"Chin Pip. Video instruction is@ youtube video below:\" #property link \" http://www.youtube.com/watch?v=svbAXmkCTKE\" #property link \"and http://www.youtube.com/watch?v=5Ds1BZl78xQ\" #include #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Black //---- input parameters extern bool Alert_on? =True; extern bool Pop_Up_Box=False; extern double Time_Out=6; extern bool Full_Voice_Support? = false; extern string INSTURCTIONS____= \"The Above requires 20 additional Sound files.\"; //---- buffers double ExtMapBuffer1; double top =-1; double bottom=-1; double hi= -1; //this is used for the visible bar High double lo= -1; //visible bar Low double hi5=-1; // (5 bar hi)this is to make sure that we didn\'t scale ourselves out of the visible area of WindowS double lo5=-1; // (5 bar low) double himax=-1; //max price on the scale. double lomin=-1; //min price on the scale int windowbars=-1; //how many bars double i=-1; //this is a counter double ii=-1; //another counter double asdf=-28347.23898,asdfff=-289349.832892;//couple of other counters double iasdf=0; //just a counter. Probably not the most efficient way to use variables. double sleep = 716.0989767; // this is an artificial sleep double timecur = -1; //this is the time current for the pauses between movements double timelock = -1; double timelock2= -1;//this is a smaller lock out just for displaying the breech message //double timelock3= -1;//this yet another time lock to make sure sounds are not piled up on each other. I probably could have been more efficient and just used one variable instead of 3. string top$=\" \"; //this is a string to convert the double top into a string string bottom$=\".\"; //this is to convert double bottom into a string string sym$ = \"nothing\"; //this is for the symbol(); int sym = -1; // this is going for case switch. double blue_ydistance= -1; //finds the ydistnace double red_ydistance = -1; string TopComment = \"none\"; string BottomComment = \"none\"; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators //Before we Start, Let\'s delete all the objects: ObjectDelete(\"top\"); ObjectDelete(\"bottom\"); ObjectDelete(\"Top Instruction\"); ObjectDelete(\"Bottom Instruction\"); ObjectDelete(\"Vis1\"); ObjectDelete(\"Vis2\"); ObjectDelete(\"Vis3\"); ObjectDelete(\"Vis4\"); //------------ SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); //Comment(\"blah blah\"); /* //>>>>>>>>>>>>>>>>>>>>>>>>>>> //let\'s do some visual effects to let traders know that this is indeed a Visual Trader himax=WindowPriceMax(0); //get the hi and low window price lomin=WindowPriceMin(0); int x1 = MathRound(WindowBarsPerChart()*0.66); int x2 = MathRound(WindowBarsPerChart()*0.39); int x3 = MathRound(WindowBarsPerChart()*0.71); int x4 = MathRound(WindowBarsPerChart()*0.31); double xx1 = lomin+(himax-lomin)/7; //the low plus a tenth of the range of the high to the low double xx2 = himax-(himax-lomin)/7; double xx3 = himax-(himax-lomin)/7; double xx4 = himax-(himax-lomin)/7; xx1=WindowPriceMax(0); xx2=WindowPriceMin(0); Comment(\"winmax\",WindowPriceMax(0), \" xx1 \", xx1, \" xx2 \", xx2, \" xx3 \", xx3, \" xx4 \", xx4); ObjectCreate(\"Vis1\",OBJ_TEXT,0,Time[x1],xx1);//lomin+(himax+lomin)/10); ObjectCreate(\"Vis2\",OBJ_TEXT,0,Time[x2],xx2);//himax-(himax+lomin)/10); ObjectCreate(\"Vis3\",OBJ_TEXT,0,Time[x3],xx3);//himax-(himax+lomin)/7); ObjectCreate(\"Vis4\",OBJ_TEXT,0,Time[x4],xx4); ObjectSetText(\"Vis1\",\"____________________________________________________________\",10,\"Arial\",Blue); //start at the middle and move towards the final location ObjectSetText(\"Vis2\",\"____________________________________________________________\",10,\"Arial\",Red); ObjectSetText(\"Vis3\",\"Visual\",30,\"Arial\",ForestGreen); ObjectSetText(\"Vis4\",\"Trader\",40,\"Arial\",ForestGreen); //final destination of: //vis1: middle and Hi (spins twice as fast) //vis2: middle and low //vis3: Left middle and Low(spins twice as fast) //vis4: Right Middle and Low //we will do a measured move from the origination to the destination i=0; for (i=0; i < 723.9000; i+=4.00000) //we want to spin this thing until it reaches the X coordinates and y coordinates we want. //i / 2 = 360 { timecur = TimeLocal(); ii=0; while (TimeLocal()WindowBarsPerChart()) windowbars = WindowBarsPerChart(); //these are numbered with last bar being number 1. If first visible bar is more than the # of bars per window, then the chart has been scrolled left. else windowbars = WindowFirstVisibleBar(); //if chart has not bee scrolled left, we can use the first visible bar himax=WindowPriceMax(0); //get the hi and low window price lomin=WindowPriceMin(0); hi=High[iHighest(NULL,0,MODE_HIGH,windowbars*0.6,0)]; lo=Low[iLowest(NULL,0,MODE_LOW,windowbars*0.6,0)]; hi5=High[iHighest(NULL,0,MODE_HIGH,15,0)]; lo5=Low[iLowest(NULL,0,MODE_LOW,15,0)]; himax=WindowPriceMax(0); lomin=WindowPriceMin(0); if (hi>himax) hi -= (hi+lo)/12; if (lolo5) lo=lo5; //if the scale is out of range, we just take the hi or low of the last 5 bars. ObjectCreate(\"top\",OBJ_HLINE,0,0,hi); ObjectSet(\"top\",OBJPROP_COLOR,Blue); ObjectCreate(\"bottom\",OBJ_HLINE,0,0,lo); ObjectSet(\"bottom\",OBJPROP_COLOR,Red); //---- return (0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ObjectDelete(\"top\"); ObjectDelete(\"bottom\"); ObjectDelete(\"Top Instruction\"); ObjectDelete(\"Bottom Instruction\"); ObjectDelete(\"Top Instruction2\"); ObjectDelete(\"Bottom Instruction2\"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>... /* for (int akak =1 ; akak< 10; akak++) { for(int kkkk=1; kkkk<500000; ) kkkk++; Comment(akak); PlaySound(\"Alert2.wav\"); kkkk=0; } */ //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> if (Alert_on? == False) { ObjectDelete(\"Top Instruction\"); ObjectCreate(\"Top Instruction\",OBJ_LABEL,0,TimeLocal(),0); ObjectSetText(\"Top Instruction\",\"Alert HAS been Turned OFF.\",10,\"Arial\",DodgerBlue); ObjectSet(\"Top Instruction\",OBJPROP_YDISTANCE, 44); ObjectSet(\"Top Instruction\",OBJPROP_XDISTANCE, 10); ObjectSet(\"top\",OBJPROP_STYLE,STYLE_DASHDOT); ObjectSet(\"top\",OBJPROP_COLOR,Yellow); ObjectSet(\"bottom\",OBJPROP_STYLE,STYLE_DASHDOT); ObjectSet(\"bottom\",OBJPROP_COLOR,Yellow); return(0); } ObjectCreate(\"Top Instruction\",OBJ_TEXT,0,Time[WindowBarsPerChart()/2],hi); ObjectSetText(\"Top Instruction\",\"DBL click BLUE line to Move or Delete.\",10,\"Arial\",DodgerBlue); // ObjectMove(\"Top Instruction\",0,Time[55],hi+15*Point); // ObjectSet(\"Top Instruction\",OBJPROP_XDISTANCE,30); ObjectSet(\"Top Instruction\",OBJPROP_ANGLE, i); if (i>3.9 || ii<-3.7) {i=-3.2; ii=3.4;} i +=0.1657; ii-=0.6; ObjectCreate(\"Bottom Instruction\",OBJ_TEXT,0,Time[WindowBarsPerChart()/2],lo); ObjectSetText(\"Bottom Instruction\",\"DBL click RED line to Move or Delete.\",10,\"Arial\",DeepPink); // ObjectMove(\"Bottom Instruction\",0,Time[37],lo+12*Point); // ObjectSet(\"Bottom Instruction\",OBJPROP_XDISTANCE,30); ObjectSet(\"Bottom Instruction\",OBJPROP_ANGLE, ii); ObjectSet(\"top\",OBJPROP_COLOR,Blue); ObjectSet(\"bottom\",OBJPROP_COLOR,Red); //this gets the price of the blue and red lines top = ObjectGet(\"top\",OBJPROP_PRICE1); bottom = ObjectGet (\"bottom\",OBJPROP_PRICE1); if(top != hi) { hi +=0.002932498*Point; top$ = NormalizeDouble(top,Digits); //--Let\'s find the decimal point to the top$ string. (we do this so we can truncate the string to shave off the extra zeros after the decimal point i=0; //for any while loop or for loop, you want to give it two ways to break the loop (for safety). while (StringGetChar(top$,i)!=46 && i<10) i+=1.01010101; //trying to find the decimal point in the top$ string top$ = StringSubstr(top$,0,i+Digits+1); //start extract the string from the first charater up to all the places behind the decimal if (TimeLocal()>timelock2) //do this only if we are not in time lock {TopComment= \"Upper Alert set at: \"+top$; } if (ObjectFind(\"top\") !=0 ) //This is if the /blue horizontal line has been deleted. { top=9999999; TopComment=\"Top Alert=off (Blue line DELETED).\"; //objfind returns the window in which the object resides. } ObjectDelete(\"Top Instruction\"); ObjectCreate(\"Top Instruction\",OBJ_LABEL,0,TimeLocal(),0); ObjectSetText(\"Top Instruction\",TopComment,10,\"Arial\",SteelBlue); ObjectSet(\"Top Instruction\",OBJPROP_YDISTANCE, 44); ObjectSet(\"Top Instruction\",OBJPROP_XDISTANCE, 10); } if(bottom != lo) { lo +=0.001228398*Point; bottom$ = NormalizeDouble(bottom,Digits); //--- The following is for trying to find the decimal point of the bottom$ string i=0; while (StringGetChar(bottom$,i)!=46 && i <10) i+=1.01010101; //trying to find the decimal point in the top$ string bottom$ = StringSubstr(bottom$,0,i+Digits+1); //start extract the string from the first charater (0) all the way to the last place behind the decimal //--- if(TimeLocal()>timelock2)//DO THIS only if we are not in lock out. {BottomComment=\"Lower Alert set at: \"+bottom$; } if (ObjectFind(\"bottom\") !=0 ) //this is if the Red line has been deleted. { bottom=-9999999; BottomComment=\"Bottom Alert=off (Red line DELETED).\";//objectfind returns the window that object resides. } ObjectDelete(\"Bottom Instruction\"); ObjectCreate(\"Bottom Instruction\",OBJ_LABEL,0,TimeLocal(),0); ObjectSetText(\"Bottom Instruction\",BottomComment,10,\"Arial\",Red); ObjectSet(\"Bottom Instruction\",OBJPROP_YDISTANCE,61); ObjectSet(\"Bottom Instruction\",OBJPROP_XDISTANCE,10); } //Comment(\"\\ntop: \", top, \" b \", bottom, \" y \", blue_ydistance, \" \", red_ydistance); if (Close[0] >=NormalizeDouble(top,Digits) && TimeLocal() > timelock && Alert_on? ==true) { timelock2=TimeLocal()+4.5; //this is a smaller lock out just for displaying the breech message timelock= TimeLocal(); //done just for a slight pause if (Pop_Up_Box == False && Full_Voice_Support? ==False) //if both of these choices are false, we default to just playing the sounds. { PlaySound(\"Alert2.wav\"); for (asdfff =-1.01012003 ; asdfff <1900.0239 ;) asdfff+=.91231; //a little pause asdfff=0; //for a while loop, you always want to give it more than one way to break the loop. while(TimeLocal()<=timelock && asdfff <990000000 ) asdfff+=1.01010101 ; //another little pause PlaySound(\"Alert.wav\"); } else { timelock = TimeLocal(); if (Full_Voice_Support? == true) { PlaySound(\"_upper.wav\"); asdfff=-10.2389; //always want to have a way to get out of the while loops. A redundancy to get out. while(TimeLocal()<=timelock+2.9 && asdfff <990000000) asdfff+=1.01010101; SoundFiles(); //(if pop up box is going to be shown, we need 3 seconds for the full voice to finish speaking. if (Full_Voice_Support? == true) for(asdfff =0; asdfff <990000000 && TimeLocal()<=timelock+5.100; asdfff+=1.01010101) asdfff+=0; //if we get a pop up box, let\'s give them 2 seconds delay before we hit the full voice //I have given this for loop two ways to break. Either when timelock is over or when loop is done. } if (Pop_Up_Box == true) { Alert(\"Upper Breech \",Symbol(),\" \",top$); //we will shoot an alert, but then go for a few seconds delay if full voice is on } } TopComment = top$+ \" Breech!\"; ObjectSetText(\"Top Instruction\",TopComment,12,\"Arial\",DodgerBlue); timelock = TimeLocal()+Time_Out; //how many seconds do we lock out the Alert } if (Close[0] <=NormalizeDouble(bottom,Digits) && TimeLocal() > timelock && Alert_on? ==true) { timelock2 = TimeLocal()+4.5;//this is a smaller lock out just for displaying the breech message timelock = TimeLocal(); //just for a slight, unofficial pause if (Pop_Up_Box == False && Full_Voice_Support? == False) //if both choices are false, we default to just playing the sound alone without pop box and no full voice support { PlaySound(\"Alert.wav\"); for (asdf =-0.02031 ; asdf <1200.0239 ;) asdf+=.91231; //a little pause asdf=0; while(TimeLocal()<=timelock && asdf < 990000000) asdf+=1.01010101; //another little pause PlaySound(\"Alert2.wav\"); } else { timelock = TimeLocal(); if (Full_Voice_Support? == true) { PlaySound(\"_lower.wav\"); asdf=0; //always want to have a way to get out of the while loops. A redundancy to get out. while(TimeLocal()<=timelock+2.9 && asdf <990000000) asdf+=1.01010101; SoundFiles(); //Comment(\"asdf \", asdf,\" asdfff \", asdfff,\" iasdf \",iasdf, \" i \", i, \" ii \",ii); iasdf=0; //if the pop up box is going to be shown, let\'s give a few seconds for the full voice to finish up. if (Pop_Up_Box == true) while(TimeLocal()<=timelock+4.99913400 && iasdf <990000000) iasdf+=1.01010101; //if we get a pop up box, let\'s give them 2 seconds delay before we hit the full voice } if (Pop_Up_Box == true) { Alert(\"Lower Breech \",Symbol(),\" \",bottom$);//we will shoot an alert, but then go for a few seconds delay if full voice is on } } BottomComment =bottom$ + \" Breech!\"; ObjectSetText(\"Bottom Instruction\",BottomComment,12,\"Arial\",Red); timelock = TimeLocal()+Time_Out; //how many seconds do we lock out the Alert } //for(asdfff=0;asdfff<99.293;asdfff +=1.020201021) asdfff+=0; //while(asdf<99.299302 && asdfff <1000) asdf +=1.101001011; // Comment(\"TimeLocal() \",TimeToStr(TimeLocal(),TIME_SECONDS),\" Lockout, \",TimeToStr(timelock2,TIME_SECONDS) ); //Comment(\"asdf \", asdf,\" asdfff \", asdfff,\" iasdf \",iasdf, \" i \", i, \" ii \",ii); //---- return(0); } //+------------------------------------------------------------------+ int SoundFiles() { sym$=Symbol(); if (sym$== \"AUDCAD\" ) sym = 1 ; if (sym$== \"AUDJPY\" ) sym = 2 ; if (sym$== \"AUDUSD\" ) sym = 3 ; if (sym$== \"CADJPY\" ) sym = 4 ; if (sym$== \"CHFJPY\" ) sym = 5 ; if (sym$== \"EURAUD\" ) sym = 6 ; if (sym$== \"EURCAD\" ) sym = 7 ; if (sym$== \"EURCHF\" ) sym = 8 ; if (sym$== \"EURGBP\" ) sym = 9 ; if (sym$== \"EURJPY\" ) sym = 10 ; if (sym$== \"EURUSD\" ) sym = 11 ; if (sym$== \"GBPCHF\" ) sym = 12 ; if (sym$== \"GBPJPY\" ) sym = 13 ; if (sym$== \"GBPUSD\" ) sym = 14 ; if (sym$== \"NZDJPY\" ) sym = 15 ; if (sym$== \"NZDUSD\" ) sym = 16 ; if (sym$== \"USDCAD\" ) sym = 17 ; if (sym$== \"USDCHF\" ) sym = 18 ; if (sym$== \"USDJPY\" ) sym = 19 ; switch(sym) { case 1: PlaySound(\"AUDCAD.wav\"); break; case 2: PlaySound(\"AUDJPY.wav\"); break; case 3: PlaySound(\"AUDUSD.wav\"); break; case 4: PlaySound(\"CADJPY.wav\"); break; case 5: PlaySound(\"CHFJPY.wav\"); break; case 6: PlaySound(\"EURAUD.wav\"); break; case 7: PlaySound(\"EURCAD.wav\"); break; case 8: PlaySound(\"EURCHF.wav\"); break; case 9: PlaySound(\"EURGBP.wav\"); break; case 10: PlaySound(\"EURJPY.wav\"); break; case 11: PlaySound(\"EURUSD.wav\"); break; case 12: PlaySound(\"GBPCHF.wav\"); break; case 13: PlaySound(\"GBPJPY.wav\"); break; case 14: PlaySound(\"GBPUSD.wav\"); break; case 15: PlaySound(\"NZDJPY.wav\"); break; case 16: PlaySound(\"NZDUSD.wav\"); break; case 17: PlaySound(\"USDCAD.wav\"); break; case 18: PlaySound(\"USDCHF.wav\"); break; case 19: PlaySound(\"USDJPY.wav\"); break; default: if (Pop_Up_Box==false) Alert(\"Full Voice not supported for \",Symbol()); break; } return(0); }
TK29帖子1楼右侧xm竖版广告90-240
个性签名

阅尽天下指标
搬砖开始,始于2014

广告
TK30+TK31帖子一樓廣告
TK30+TK31帖子一樓廣告

本站免责声明:

1、本站所有广告及宣传信息均与韬客无关,如需投资请依法自行决定是否投资、斟酌资金安全及交易亏损风险;

2、韬客是独立的、仅为投资者提供交流的平台,网友发布信息不代表韬客的观点与意思表示,所有因网友发布的信息而造成的任何法律后果、风险与责任,均与韬客无关;

3、金融交易存在极高法律风险,未必适合所有投资者,请不要轻信任何高额投资收益的诱导而贸然投资;投资保证金交易导致的损失可能超过您投入的资金和预期。请您考虑自身的投资经验及风险承担能力,进行合法、理性投资;

4、所有投资者的交易帐户应仅限本人使用,不应交由第三方操作,对于任何接受第三方喊单、操盘、理财等操作的投资和交易,由此导致的任何风险、亏损及责任由投资者个人自行承担;

5、韬客不隶属于任何券商平台,亦不受任何第三方控制,韬客不邀约客户投资任何保证金交易,不接触亦不涉及投资者的任何资金及账户信息,不代理任何交易操盘行为,不向客户推荐任何券商平台,亦不存在其他任何推荐行为。投资者应自行选择券商平台,券商平台的任何行为均与韬客无关。投资者注册及使用韬客即表示其接受和认可上述声明,并自行承担法律风险。

版权所有:韬客外汇论坛 www.talkfx.com 联络我们:[email protected]