//+------------------------------------------------------------------+ //| TrapSELL.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 =333; //マジックナンバーの代入 extern double Start =128.00; //スタート価格を代入 extern double Minimum =122.00;//最小価格を代入 extern double Haba =0.1; //トラップ幅を入力 extern double Rikaku =0.3; //利確幅を入力 extern double Lots =0.03; //ロット数を入力 extern double TrapMin=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((TrapMin == 0) && (NowRate == 0)) { //上限より現在のレートが上 if(Bid > Start) { TrapMin = Start + Haba; NowRate = Start; } //上限より現在のレートが下 else { //下限より現在のレートが下 if(Bid < Minimum) { NowRate = Minimum; } //下限より現在のレートが上 else { NowRate = Bid; } //スタート価格から現在値までの指値を入れる j = (Start - NowRate) / Haba; for (i=0;i <= j;i++) { if(OrderSend(Symbol(),OP_SELLLIMIT,Lots,Start - Haba * i,Slippage,0,Start - (Haba * i) - Rikaku,"",MAGIC_TRAP,0,Red) > 0) { NowRate = Start - Haba * i; TrapMin = NowRate; } } } } else { TrapStart = 1; } //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- //決済されたら新規注文 if(Ask <= NowRate - Rikaku) { if(NowRate >= Minimum) { if(OrderSend(Symbol(),OP_SELLLIMIT,Lots,NowRate,Slippage,0,NowRate - Rikaku,"",MAGIC_TRAP,0,Red) > 0) { NowRate = NowRate - Haba; } } } //逆指値到達したら新規注文 if(Bid <= TrapMin - Haba) { if(Bid >= Minimum) { if(OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,Bid - Rikaku,"",MAGIC_TRAP,0,Green) > 0) { TrapMin = TrapMin - Haba; if(TrapStart < 1) { NowRate = TrapMin; TrapStart = 1; } } } } //IFD注文が約定したらカウント if(Bid >= NowRate + Haba) { if(Bid <= Start) { NowRate = NowRate + Haba; TrapStart = 1; } } //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ // // 再始動に備えて、終了時にアラーム出力を行う。 int deinit() { //---- Alert(""); Alert("*** stop ***"); Alert("TrapMin:",TrapMin); Alert("NowRate:",NowRate); //---- return(0); }