//+------------------------------------------------------------------+ //| TrapBUY.mq4 | //| Copyright ゥ 2010, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright ゥ 2010, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern int MAGIC_TRAP =222; //マジックナンバーの代入 extern double Start =83.00; //スタート価格を代入 extern double Maximum =88.00;//最大価格を代入 extern double Haba =0.1; //トラップ幅を入力 extern double Rikaku =0.1; //利確幅を入力 extern double Lots =0.03; //ロット数を入力 extern double TrapMax=0; //今までの最高値の建値(再開時以外は0) extern double NowRate = 0; //次に利確される建値(再開時以外は0) extern double Slippage =3; //スリッページを入力(プロ口座の場合30にして下さい) int TrapStart = 0; //最初に逆指値が刺さってしまった場合の判定フラグ //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- int i; int j; //途中から再開する場合はこの2つのパラメーターに適切な値を入れる if((TrapMax == 0) && (NowRate == 0)) { //下限より現在のレートが下 if(Ask < Start) { TrapMax = Start - Haba; NowRate = Start; } //下限より現在のレートが上 else { //上限より現在のレートが上 if(Ask > Maximum) { NowRate = Maximum; } //上限より現在のレートが下 else { NowRate = Ask; } //スタート価格から現在値までの指値を入れる j = (NowRate - Start) / Haba; for (i=0;i <= j;i++) { if(OrderSend(Symbol(),OP_BUYLIMIT,Lots,Start + Haba * i,Slippage,0,Start + (Haba * i) + Rikaku,"",MAGIC_TRAP,0,Red) > 0) { NowRate = Start + Haba * i; TrapMax = NowRate; } } } } else { TrapStart = 1; } //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- //決済されたら新規注文 if(Bid >= NowRate + Rikaku) { if(NowRate <= Maximum) { if(OrderSend(Symbol(),OP_BUYLIMIT,Lots,NowRate,Slippage,0,NowRate + Rikaku,"",MAGIC_TRAP,0,Red) > 0) { NowRate = NowRate + Haba; } } } //逆指値到達したら新規注文 if(Ask >= TrapMax + Haba) { if(Ask <= Maximum) { if(OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,Ask + Rikaku,"",MAGIC_TRAP,0,Green) > 0) { TrapMax = TrapMax + Haba; if(TrapStart < 1) { NowRate = TrapMax; TrapStart = 1; } } } } //IFD注文が約定したらカウント if(Ask <= NowRate - Haba) { if(Ask >= Start) { NowRate = NowRate - Haba; TrapStart = 1; } } //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ // // 再始動に備えて、終了時にアラーム出力を行う。 int deinit() { //---- Alert(""); Alert("*** stop ***"); Alert("TrapMax:",TrapMax); Alert("NowRate:",NowRate); //---- return(0); }