//+------------------------------------------------------------------+ //| Fibonacci_EA.mq4 | //| Copyright ゥ 2010, MetaQuotes Software Corp. | //| http://forex.toyolab.com | //+------------------------------------------------------------------+ #property copyright "Copyright (c) 2010, TORURIPI-R" #property link "http://sys-trd.com"
//マジックナンバー A=10 n=14 +24 extern int magic0 = 24000;//同じ通貨ペアで複数動かすときに値を変えてください #define MAGIC1 10100100 #define MAGIC2 10100200 #define MAGIC3 10100300 #define MAGIC4 10100400 #define COMMENT1 "Fibo_BUY_LIMIT_TORURIPI-R" #define COMMENT2 "Fibo_BUY_STOP_TORURIPI-R" #define COMMENT3 "Fibo_SELL_STOP_TORURIPI-R" #define COMMENT4 "Fibo_SELL_50STOP_TORURIPI-R"
//パラメーター extern double Lots = 0.1;//売買ロット0.1=1万通貨 extern int lookback = 158;//HI.LOWを決める足の数長いほど過去重視 extern double loss1=0.05;//買いトレード1のポジションの損切り値調整用 extern double loss2=0.028;//買いトレード2のポジションの損切り値調整用 extern double loss3=0.05;//売りトレード1のポジションの損切り値調整用 extern double loss4=0.005;//売りトレード2のポジションの損切り値調整用 extern int keeptime=21600;//6時間で一旦注文をリセット extern double loss0=0.0005;//買いトレード2の買値調整 //1.29123
extern color FibColor= Gray; extern int lastbar = 5; extern int Slippage = 0; double loweststock; double higheststock;
//+------------------------------------------------------------------+ //| 予約を削除する | //+------------------------------------------------------------------+ void DeletePositions(){ for(int i=0; i < OrdersTotal(); i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){ if(OrderMagicNumber() == MAGIC1+magic0 && OrderSymbol() != Symbol()){ OrderDelete(OrderTicket()); } if(OrderMagicNumber() == MAGIC2+magic0 && OrderSymbol() != Symbol()){ OrderDelete(OrderTicket()); } if(OrderMagicNumber() == MAGIC3+magic0 && OrderSymbol() != Symbol()){ OrderDelete(OrderTicket()); } if(OrderMagicNumber() == MAGIC4+magic0 && OrderSymbol() == Symbol()){ OrderDelete(OrderTicket()); //Alert(OrderTicket()); } }//if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)
}//for(int i=0; i < OrdersTotal(); i++) }//sub end
// 現在のポジションのロット数(+:買い −:売り) double R_CurrentOrders(int magic){ double lots = 0.0;
for(int i=0; i < OrdersTotal(); i++){ if(OrderSelect(i, SELECT_BY_POS) == false) break; if(OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
if(OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP) lots += OrderLots(); if(OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) lots -= OrderLots();
if(lots != 0) break; }//for(int i=0; i < OrdersTotal(); i++) return(lots); }
//+------------------------------------------------------------------+ //| スタート関数 | //+------------------------------------------------------------------+ int start() { ObjectDelete("Fibo"); int counted_bars=IndicatorCounted(); //---- double lowest=1000,highest=0; datetime T1,T2; for(int i=lookback+lastbar;i > lastbar+1;i--){ double curLow0=iLow(Symbol(),Period(),i-2); double curLow1=iLow(Symbol(),Period(),i+1); double curLow2=iLow(Symbol(),Period(),i); double curLow3=iLow(Symbol(),Period(),i-1); double curLow4=iLow(Symbol(),Period(),i-2); double curHigh0=iHigh(Symbol(),Period(),i+2); double curHigh1=iHigh(Symbol(),Period(),i+1); double curHigh2=iHigh(Symbol(),Period(),i); double curHigh3=iHigh(Symbol(),Period(),i-1); double curHigh4=iHigh(Symbol(),Period(),i-2); if(curLow2 <= curLow1 && curLow2 <= curLow1 && curLow2 <= curLow0 ){ if(lowest > curLow2){ lowest=curLow2; T2=iTime(Symbol(),Period(),i); } }//if(curLow2 if(curHigh2 >= curHigh1 && curHigh2 >= curHigh3&& curHigh2 >= curHigh4){ if(highest < curHigh2){ highest=curHigh2; T1=iTime(Symbol(),Period(),i); } }//if(curHigh2
}//for(int i=lookback+lastbar;i > lastbar+1;i--)
if(lowest != loweststock && highest != higheststock){ loweststock=lowest; higheststock=highest; DeletePositions();//未約定ポジションの削除 }//if(lowest != loweststock && highest != higheststock)
if(T1 < T2) {ObjectCreate("Fibo", OBJ_FIBO, 0, T1, highest,T2,lowest);} else{ ObjectCreate("Fibo", OBJ_FIBO, 0, T2, lowest, T1,highest); } string fiboobjname = "Fibo"; ObjectSet(fiboobjname, OBJPROP_FIBOLEVELS, 11); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL, 0.0); ObjectSetFiboDescription(fiboobjname,0,"Low %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+1, 0.236); ObjectSetFiboDescription(fiboobjname,1,"23.6 %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+2, 0.382); ObjectSetFiboDescription(fiboobjname,2,"38.2 %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+3, 0.50); ObjectSetFiboDescription(fiboobjname,3,"50.0 %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+4, 0.618); ObjectSetFiboDescription(fiboobjname,4,"61.8 %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+5, 0.764); ObjectSetFiboDescription(fiboobjname,5,"76.4 %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+6, 1.000); ObjectSetFiboDescription(fiboobjname,6,"High %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+7, -0.236); ObjectSetFiboDescription(fiboobjname,7,"123.6 %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+8, -0.382); ObjectSetFiboDescription(fiboobjname,8,"138.2 %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+9, -0.50); ObjectSetFiboDescription(fiboobjname,9,"150.0 %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+10, -0.618); ObjectSetFiboDescription(fiboobjname,10,"161.8 %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+11, 2.000); ObjectSetFiboDescription(fiboobjname,11,"200.0 %$"); ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+12, 2.618); ObjectSetFiboDescription(fiboobjname,12,"261.8 %$"); ObjectSet( "Fibo", OBJPROP_LEVELCOLOR, FibColor) ; ObjectsRedraw();
//バーの始値でトレード可能かチェック if(Volume[0] > 1 || IsTradeAllowed()==false) return(0);
double fibo1;//23.6 double fibo2;//38.2 double fibo3;//50 double fibo4;//61.8 double fibo5;//76.4 //Low fibo1=(highest-lowest)*0.236+lowest; fibo2=(highest-lowest)*0.382+lowest; fibo3=(highest-lowest)*0.5+lowest; fibo4=(highest-lowest)*0.618+lowest; fibo5=(highest-lowest)*0.764+lowest; //HI
if((highest - lowest) > 0){
int ttt=TimeCurrent()+keeptime; string tt=TimeToStr(ttt,TIME_DATE|TIME_SECONDS);//予約有効期限 int buy1=0; int buy2=0; int sell1=0; int sell2=0;
//買いシグナル1; if(highest > Ask && Ask > fibo2){ buy1=1; } //買いシグナル2 if(fibo2 > Ask && Ask > lowest){ buy2=1; } //売りシグナル1 if(highest > Bid && Bid > fibo4){ sell1=1; } //売りシグナル2 if(highest > Bid && Bid > fibo3){ sell2=1; }
Comment("sarvertime:",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS), "\n",buy1,"\n",buy2,"\n",sell1,"\n",sell2);
//買いシグナル1; if(buy1==1 && R_CurrentOrders(MAGIC1+magic0) == 0){ OrderSend(Symbol(),OP_BUYLIMIT,Lots,fibo2,Slippage,fibo1 -loss1,fibo3,COMMENT1,MAGIC1+magic0,ttt,Blue); }
//買いシグナル2 if(buy2==1 && R_CurrentOrders(MAGIC2+magic0) == 0){ OrderSend(Symbol(),OP_BUYSTOP,Lots,fibo2+loss0,Slippage,fibo1 -loss2,fibo3,COMMENT2,MAGIC2+magic0,ttt,Green); }
//売りシグナル1 if(sell1==1 && R_CurrentOrders(MAGIC3+magic0) == 0){ OrderSend(Symbol(),OP_SELLSTOP,Lots,fibo4,Slippage,fibo5+loss3,fibo3, COMMENT3,MAGIC3+magic0,ttt,Red); } //売りシグナル2 if(sell2==1 && R_CurrentOrders(MAGIC4+magic0) == 0){ OrderSend(Symbol(),OP_SELLSTOP,Lots,fibo3,Slippage,fibo4+loss4,fibo2, COMMENT4,MAGIC4+magic0,ttt,Orange); } }//if(highest-lowest) > Bid / fibomin)
return(0); } //+------------------------------------------------------------------+
|
|