大型投行
- 金钱
- 273475 美元
- 权重
- 2293 股
|
图示:
代码:
普通版本.mq4
(8.59 KB, 下载次数: 3)
平行线通道中间线可调版本.mq4
(12.5 KB, 下载次数: 1)
普通版本
- //frlin2003通道脚本
- int start(){
- datetime time1,time2,time3,time4;//默认情况下(time1=左下点,time2=右下点,time3=左上点,time4为自定义参数,为右上点)
- double price1,price2,price3,price4;//默认情况下(price1=左下点,price2=右下点,price3=左上点,price4为自定义参数,为右上点)
- double price5;//price3下面垂直对应的价格
- double price3_Show;//由price3进行位移,以不挡住视线
- datetime time3_Show;//由time3进行位移,以不挡住视线
- int K=0;//覆盖的K数量
- double Kuan=0;//通道宽度(点)
- string Kuan_Show;
- int shift1,shift2,shift3,shift4;//某个点以bar为单位的横坐标,比如当前价格则为0,上一个K为1
- string name,name2;
- bool YesOrNo=false;//false=删除,true=保留不删(针对斐波旁边的文字)
-
- while(IsStopped() == false){
- //代码开始
- Comment("");//为了让文字实时更新的触发器
- for(int i=0;i<ObjectsTotal();i++){
- name=ObjectName(i);
- //删除遗留左上角文字
- if(ObjectType(name)==OBJ_TEXT && StringFind(name,"frlin2003_text",0)>-1){//删除斐波遗留的文字,只操作斐波相关的文本框,不操作其他的文本框
- //这个if里,name=斐波相关的文本框的名字
- YesOrNo=false;//默认:没找到匹配=删除
- for(int k=0;k<ObjectsTotal();k++){
- name2=ObjectName(k);
- if(ObjectType(name2)==OBJ_FIBOCHANNEL){//取得斐波通道的名字
- if(StringFind(name,name2,0)>-1){ //搜索某个text的名称是否对应于某个斐波的名字
- YesOrNo=true;//找到匹配=不删
- }
- }
- }
- if(YesOrNo==false){//发现某个文本框,不对应于任意一个斐波
- ObjectDelete(name);
- }
- }
- //删除遗留底边辅助线
- if(ObjectType(name)==OBJ_TREND && StringFind(name,"frlin2003_bottomline",0)>-1){//删除斐波遗留的底边辅助线,只操作斐波相关的底边辅助线,不操作其他的趋势线
- //这个if里,name=斐波相关的底边辅助线的名字
- YesOrNo=false;//默认:没找到匹配=删除
- for(int j=0;j<ObjectsTotal();j++){
- name2=ObjectName(j);
- if(ObjectType(name2)==OBJ_FIBOCHANNEL){//取得斐波通道的名字
- if(StringFind(name,name2,0)>-1){ //搜索某个text的名称是否对应于某个斐波的名字
- YesOrNo=true;//找到匹配=不删
- }
- }
- }
- if(YesOrNo==false){//发现某个文本框,不对应于任意一个斐波
- ObjectDelete(name);
- }
- }
- //删除遗留斐波参数3辅助线(点)
- if(ObjectType(name)==OBJ_TREND && StringFind(name,"frlin2003_point_p3",0)>-1){//删除斐波遗留的底边辅助线,只操作斐波相关的底边辅助线,不操作其他的趋势线
- //这个if里,name=斐波相关的底边辅助线的名字
- YesOrNo=false;//默认:没找到匹配=删除
- for(int h=0;h<ObjectsTotal();h++){
- name2=ObjectName(h);
- if(ObjectType(name2)==OBJ_FIBOCHANNEL){//取得斐波通道的名字
- if(StringFind(name,name2,0)>-1){ //搜索某个text的名称是否对应于某个斐波的名字
- YesOrNo=true;//找到匹配=不删
- }
- }
- }
- if(YesOrNo==false){//发现某个文本框,不对应于任意一个斐波
- ObjectDelete(name);
- }
- }
- else if(ObjectType(name)==OBJ_FIBOCHANNEL){//这个else if 的功能是计算并显示斐波的宽度和覆盖K数
-
- //标准化斐波那契,只留一条-0.5的线,并且设置为白色,使看不到
- ObjectSet(name,OBJPROP_FIBOLEVELS,1);
- ObjectSet(name,OBJPROP_FIRSTLEVEL+0,(-0.5));
- //ObjectSet(name,OBJPROP_LEVELCOLOR,Red);
- //标准化结束
-
- time1=ObjectGet(name,OBJPROP_TIME1);
- time2=ObjectGet(name,OBJPROP_TIME2);
- time3=ObjectGet(name,OBJPROP_TIME3);
- //time4无法直接取得,尽量压根不用这个数
- price1=ObjectGet(name,OBJPROP_PRICE1);
- price2=ObjectGet(name,OBJPROP_PRICE2);
- price3=ObjectGet(name,OBJPROP_PRICE3);
- price4=price3-price1+price2;//暂无用
-
- //底边辅助线的建立,并计算通过计算辅助线两段的shift,来确定斐波底边两段的shift
- if(ObjectFind("frlin2003_bottomline"+"_"+name)==(-1)){
- ObjectCreate("frlin2003_bottomline"+"_"+name,OBJ_TREND,0,time1,price1,time2,price2);
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_COLOR,Black);
- }
- else{
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_TIME1,time1);
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_TIME2,time2);
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_PRICE1,price1);
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_PRICE2,price2);
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_RAY,false);
- }
- shift1=ObjectGetShiftByValue("frlin2003_bottomline"+"_"+name,ObjectGet("frlin2003_bottomline"+"_"+name,OBJPROP_PRICE1));
- shift2=ObjectGetShiftByValue("frlin2003_bottomline"+"_"+name,ObjectGet("frlin2003_bottomline"+"_"+name,OBJPROP_PRICE2));
- ObjectDelete("frlin2003_bottomline"+"_"+name);//取完shift1,2就删,碍事
- //斐波参数3辅助点(线)的建立,来确定斐波参数3的shift
- if(ObjectFind("frlin2003_point_p3"+"_"+name)==(-1)){
- ObjectCreate("frlin2003_point_p3"+"_"+name,OBJ_TREND,0,time3,price3,time2,price2);
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_COLOR,White);
- }
- else{
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_TIME1,time3);
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_TIME2,time2);//任意均可
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_PRICE1,price3);
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_PRICE2,price2);
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_RAY,false);
- }
- shift3=ObjectGetShiftByValue("frlin2003_point_p3"+"_"+name,ObjectGet("frlin2003_point_p3"+"_"+name,OBJPROP_PRICE1));
- ObjectDelete("frlin2003_point_p3"+"_"+name);//取完shift3就删,碍事
- K=shift1-shift2+1;//加1,代表计算起点和终点
- //三角形公式:(t1-t3)/(t1-t2)=x/(p2-p1)
- Kuan=price3-price1-(shift1*1.0-shift3)/(shift1*1.0-shift2)*(price2-price1);//宽
- Kuan_Show=DoubleToStr(MathAbs(Kuan)/(Point*10),0);//为观看便利,取整
-
- //微调界面文字位置
- if(price3>price1){
- price3_Show=price3+(WindowPriceMax()-WindowPriceMin())/50;//为了不让线挡住文字,对文字纵坐标进行一定的移动(屏幕纵坐标的1/50)
- }
- else{
- price3_Show=price3;//默认上线在默认下线之下,这种情况不需要移动纵坐标
- }
- //微调界面文字位置
- time3_Show=GetTimeByShift(shift3+WindowBarsPerChart()/50);
- /*以下代码同上面一行
- if((shift3+WindowBarsPerChart()/50)<0){
- time3_Show=Time[0]+MathAbs(shift3+WindowBarsPerChart()/50)*Period()*60;
- //Comment(DoubleToStr(shift3+WindowBarsPerChart()/50,0));
- }
- else{
- time3_Show=Time[(shift3+WindowBarsPerChart()/50)];//为了不让线挡住文字,对文字横坐标进行一定的移动(屏幕横坐标的1/60)
- //Comment(DoubleToStr(shift3,0));
- //Time[-1] doesn't work
- //Use
- //Time[0] + numberOfSecondsIntoTheFuture;
- //Time[0]+10*Period()*60; // 10 bars into the future
- }
- */
- ObjectCreate("frlin2003_text"+"_"+name,OBJ_TEXT,0,time3_Show,price3_Show);
- ObjectSet("frlin2003_text"+"_"+name,OBJPROP_TIME1,time3_Show);//让文本框随着斐波的移动而移动
- ObjectSet("frlin2003_text"+"_"+name,OBJPROP_PRICE1,price3_Show);//让文本框随着斐波的移动而移动
- ObjectSetText("frlin2003_text"+"_"+name,Kuan_Show+" ,"+DoubleToStr(K,0),9,"Arial",Black);//随时更新斐波覆盖的K数
-
- //中线操作开始
-
-
- }
- }
- //代码结束
- Sleep(1000);
- }//end while
- return(0);
- }
- datetime GetTimeByShift(int shift){//可以跨越未来区域
- if(shift>=0){
- return (Time[shift]);
- }
- else{
- return (Time[0]+MathAbs(shift)*Period()*60);
- }
- }
复制代码
代码:
平行线通道中间线可调版本
- //frlin2003通道脚本
- int start(){
- datetime time1,time2,time3,time4;//默认情况下(time1=左下点,time2=右下点,time3=左上点,time4为自定义参数,为右上点)
- double price1,price2,price3,price4;//默认情况下(price1=左下点,price2=右下点,price3=左上点,price4为自定义参数,为右上点)
- double price5;//price3下面垂直对应的价格
- double price3_Show;//由price3进行位移,以不挡住视线
- datetime time3_Show;//由time3进行位移,以不挡住视线
- int K=0;//覆盖的K数量
- double Kuan=0;//通道宽度(点)
- string Kuan_Show;
- int shift1,shift2,shift3,shift4;//某个点以bar为单位的横坐标,比如当前价格则为0,上一个K为1
- string name,name2;
- bool YesOrNo=false;//false=删除,true=保留不删(针对斐波旁边的文字)
- //关于中线的参数
- datetime midline_time1,midline_time2,midline_time3;//参数1和2为线段的两头,参数3为调整长度后的终点
- double midline_price1,midline_price2,midline_price3;
- int midline_shift1,midline_shift2;//中线起点/终点的bar-index,1和2为理想终点起点,3为手动后的
- int midline_shift1_new,midline_shift2_new,midline_idea_shift1,midline_idea_shift2,midline_idea_shift3;
- //midline_shift1_new从实际线段取得的起点
- int midline_k;//中线的覆盖K数
- while(IsStopped() == false){
- //代码开始
- Comment("");//为了让文字实时更新的触发器
- for(int i=0;i<ObjectsTotal();i++){
- name=ObjectName(i);
- //删除遗留左上角文字
- if(ObjectType(name)==OBJ_TEXT && StringFind(name,"frlin2003_text",0)>-1){//删除斐波遗留的文字,只操作斐波相关的文本框,不操作其他的文本框
- //这个if里,name=斐波相关的文本框的名字
- YesOrNo=false;//默认:没找到匹配=删除
- for(int k=0;k<ObjectsTotal();k++){
- name2=ObjectName(k);
- if(ObjectType(name2)==OBJ_FIBOCHANNEL){//取得斐波通道的名字
- if(StringFind(name,name2,0)>-1){ //搜索某个text的名称是否对应于某个斐波的名字
- YesOrNo=true;//找到匹配=不删
- }
- }
- }
- if(YesOrNo==false){//发现某个文本框,不对应于任意一个斐波
- ObjectDelete(name);
- }
- }
- //删除遗留底边辅助线
- else if(ObjectType(name)==OBJ_TREND && StringFind(name,"frlin2003_bottomline",0)>-1){//删除斐波遗留的底边辅助线,只操作斐波相关的底边辅助线,不操作其他的趋势线
- //这个if里,name=斐波相关的底边辅助线的名字
- YesOrNo=false;//默认:没找到匹配=删除
- for(int j=0;j<ObjectsTotal();j++){
- name2=ObjectName(j);
- if(ObjectType(name2)==OBJ_FIBOCHANNEL){//取得斐波通道的名字
- if(StringFind(name,name2,0)>-1){ //搜索某个text的名称是否对应于某个斐波的名字
- YesOrNo=true;//找到匹配=不删
- }
- }
- }
- if(YesOrNo==false){//发现某个文本框,不对应于任意一个斐波
- ObjectDelete(name);
- }
- }
- //删除遗留斐波参数3辅助线(点)
- else if(ObjectType(name)==OBJ_TREND && StringFind(name,"frlin2003_point_p3",0)>-1){//删除斐波遗留的底边辅助线,只操作斐波相关的底边辅助线,不操作其他的趋势线
- //这个if里,name=斐波相关的底边辅助线的名字
- YesOrNo=false;//默认:没找到匹配=删除
- for(int h=0;h<ObjectsTotal();h++){
- name2=ObjectName(h);
- if(ObjectType(name2)==OBJ_FIBOCHANNEL){//取得斐波通道的名字
- if(StringFind(name,name2,0)>-1){ //搜索某个text的名称是否对应于某个斐波的名字
- YesOrNo=true;//找到匹配=不删
- }
- }
- }
- if(YesOrNo==false){//发现某个文本框,不对应于任意一个斐波
- ObjectDelete(name);
- }
- }
- else if(ObjectType(name)==OBJ_TREND && StringFind(name,"frlin2003_middleline",0)>-1){//删除斐波遗留的中线
- //这个if里,name=斐波相关的文本框的名字
- YesOrNo=false;//默认:没找到匹配=删除
- for(int g=0;g<ObjectsTotal();g++){
- name2=ObjectName(g);
- if(ObjectType(name2)==OBJ_FIBOCHANNEL){//取得斐波通道的名字
- if(StringFind(name,name2,0)>-1){ //搜索某个text的名称是否对应于某个斐波的名字
- YesOrNo=true;//找到匹配=不删
- }
- }
- }
- if(YesOrNo==false){//发现某个文本框,不对应于任意一个斐波
- ObjectDelete(name);
- }
- }
- else if(ObjectType(name)==OBJ_FIBOCHANNEL){//这个else if 的功能是计算并显示斐波的宽度和覆盖K数
- //标准化斐波那契,只留一条-0.5的线,并且设置为白色,使看不到
- ObjectSet(name,OBJPROP_FIBOLEVELS,1);
- ObjectSet(name,OBJPROP_FIRSTLEVEL+0,(-1));
- ObjectSet(name,OBJPROP_LEVELCOLOR,Black);
- //标准化结束
- time1=ObjectGet(name,OBJPROP_TIME1);
- time2=ObjectGet(name,OBJPROP_TIME2);
- time3=ObjectGet(name,OBJPROP_TIME3);
- //time4等待补算
- price1=ObjectGet(name,OBJPROP_PRICE1);
- price2=ObjectGet(name,OBJPROP_PRICE2);
- price3=ObjectGet(name,OBJPROP_PRICE3);
- price4=price3-price1+price2;//暂无用
- //底边辅助线的建立,并计算通过计算辅助线两段的shift,来确定斐波底边两段的shift
- if(ObjectFind("frlin2003_bottomline"+"_"+name)==(-1)){
- ObjectCreate("frlin2003_bottomline"+"_"+name,OBJ_TREND,0,time1,price1,time2,price2);
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_COLOR,Black);
- }
- else{
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_TIME1,time1);
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_TIME2,time2);
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_PRICE1,price1);
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_PRICE2,price2);
- ObjectSet("frlin2003_bottomline"+"_"+name,OBJPROP_RAY,false);
- }
- shift1=ObjectGetShiftByValue("frlin2003_bottomline"+"_"+name,ObjectGet("frlin2003_bottomline"+"_"+name,OBJPROP_PRICE1));
- shift2=ObjectGetShiftByValue("frlin2003_bottomline"+"_"+name,ObjectGet("frlin2003_bottomline"+"_"+name,OBJPROP_PRICE2));
- ObjectDelete("frlin2003_bottomline"+"_"+name);//取完shift1,2就删,碍事
- //斐波参数3辅助点(线)的建立,来确定斐波参数3的shift
- if(ObjectFind("frlin2003_point_p3"+"_"+name)==(-1)){
- ObjectCreate("frlin2003_point_p3"+"_"+name,OBJ_TREND,0,time3,price3,time2,price2);
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_COLOR,White);
- }
- else{
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_TIME1,time3);
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_TIME2,time2);//任意均可
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_PRICE1,price3);
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_PRICE2,price2);
- ObjectSet("frlin2003_point_p3"+"_"+name,OBJPROP_RAY,false);
- }
- shift3=ObjectGetShiftByValue("frlin2003_point_p3"+"_"+name,ObjectGet("frlin2003_point_p3"+"_"+name,OBJPROP_PRICE1));
- //shift4等待补算
- ObjectDelete("frlin2003_point_p3"+"_"+name);//取完shift3就删,碍事
- //有了shift3,补算剩下的基本数据
- shift4=shift3-(shift1-shift2);
- time4=GetTimeByShift(shift4);
- //斐波4个点位的price,time,shift齐全了
- K=shift1-shift2+1;//加1,代表计算起点和终点
- //三角形公式:(t1-t3)/(t1-t2)=x/(p2-p1)
- //排除除以0的情况
- if((shift1*1.0-shift2)!=0 && MathAbs(price2-price1)>0.0000001){
- Kuan=price3-price1-(shift1*1.0-shift3)/(shift1*1.0-shift2)*(price2-price1);
- }
- else{
- Kuan=0;
- }
- Kuan_Show=DoubleToStr(MathAbs(Kuan)/(Point*10),0);//为观看便利,取整
- //微调界面文字位置
- if(price3>price1){
- price3_Show=price3+(WindowPriceMax()-WindowPriceMin())/50;//为了不让线挡住文字,对文字纵坐标进行一定的移动(屏幕纵坐标的1/50)
- }
- else{
- price3_Show=price3;//默认上线在默认下线之下,这种情况不需要移动纵坐标
- }
- //微调界面文字位置
- time3_Show=GetTimeByShift(shift3+WindowBarsPerChart()/50);
- /*以下代码同上面一行
- if((shift3+WindowBarsPerChart()/50)<0){
- time3_Show=Time[0]+MathAbs(shift3+WindowBarsPerChart()/50)*Period()*60;
- //Comment(DoubleToStr(shift3+WindowBarsPerChart()/50,0));
- }
- else{
- time3_Show=Time[(shift3+WindowBarsPerChart()/50)];//为了不让线挡住文字,对文字横坐标进行一定的移动(屏幕横坐标的1/60)
- //Comment(DoubleToStr(shift3,0));
- //Time[-1] doesn't work
- //Use
- //Time[0] + numberOfSecondsIntoTheFuture;
- //Time[0]+10*Period()*60; // 10 bars into the future
- }
- */
- ObjectCreate("frlin2003_text"+"_"+name,OBJ_TEXT,0,time3_Show,price3_Show);
- ObjectSet("frlin2003_text"+"_"+name,OBJPROP_TIME1,time3_Show);//让文本框随着斐波的移动而移动
- ObjectSet("frlin2003_text"+"_"+name,OBJPROP_PRICE1,price3_Show);//让文本框随着斐波的移动而移动
- ObjectSetText("frlin2003_text"+"_"+name,Kuan_Show+" ,"+DoubleToStr(K,0),9,"Arial",Black);//随时更新斐波覆盖的K数
- //中线操作开始
- midline_time1=GetTimeByShift(shift1-(shift1-shift3)/2);//根据斐波算出理想状态下(未修改长度)
- midline_price1=price1+(price3-price1)/2;
- midline_time2=GetTimeByShift(shift1-(shift1-shift3)/2-(shift1-shift2));
- midline_price2=price2+(price4-price2)/2;
- ObjectCreate("frlin2003_middleline"+"_"+name,OBJ_TREND,0,midline_time1,midline_price1,midline_time2,midline_price2);
- ObjectSet("frlin2003_middleline"+"_"+name,OBJPROP_RAY,0);//取消射线
- midline_shift1=ObjectGetShiftByValue("frlin2003_middleline"+"_"+name,ObjectGet("frlin2003_middleline"+"_"+name,OBJPROP_PRICE1));//手动取得实际起点
- midline_shift2=ObjectGetShiftByValue("frlin2003_middleline"+"_"+name,ObjectGet("frlin2003_middleline"+"_"+name,OBJPROP_PRICE2));//手动取得实际终点
- midline_k=midline_shift1-midline_shift2;//保存覆盖K的数量
- midline_idea_shift1=shift1-(shift1-shift3)/2;//假设存在的-0.5与斐波平行且等长的线的起点
- midline_idea_shift2=shift1-(shift1-shift3)/2-(shift1-shift2);//假设存在的-0.5与斐波平行且等长的线的终点
- midline_idea_shift3=midline_idea_shift1-midline_k;
- midline_shift1_new=shift1-(shift1-shift3)/2;//根据斐波计算的新起点
- midline_shift2_new=midline_shift1_new-midline_k;//根据新起点和K覆盖计算新终点
- //最终求得
- midline_time3=GetTimeByShift(midline_shift2_new);
- //排除除以0的情况
- if((midline_idea_shift1*1.0-midline_idea_shift2)!=0 && MathAbs(midline_price2-midline_price1)>0.0000001){
- midline_price3=midline_price1+(midline_idea_shift1*1.0-midline_idea_shift3)/(midline_idea_shift1*1.0-midline_idea_shift2)*(midline_price2-midline_price1);//根据三角形公式计算
- }
- else{
- midline_price3=0;
- }
- ObjectSet("frlin2003_middleline"+"_"+name,OBJPROP_TIME1,midline_time1);//让起点随着斐波的移动而移动
- ObjectSet("frlin2003_middleline"+"_"+name,OBJPROP_PRICE1,midline_price1);//让起点随着斐波的移动而移动
- ObjectSet("frlin2003_middleline"+"_"+name,OBJPROP_TIME2,midline_time3);//让终点随着斐波的移动而移动,但保留长度
- ObjectSet("frlin2003_middleline"+"_"+name,OBJPROP_PRICE2,midline_price3);//让终点随着斐波的移动而移动,但保留长度
- }
- }
- //代码结束
- Sleep(1000);
- }//end while
- return(0);
- }
- datetime GetTimeByShift(int shift){//可以跨越未来区域
- if(shift>=0){
- return (Time[shift]);
- }
- else{
- return (Time[0]+MathAbs(shift)*Period()*60);
- }
- }
复制代码
|
|