//+------------------------------------------------------------------+ //| OrdTrap.mq4 | //| Copyright ゥ 2010, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright ゥ 2010, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" // 一括でトラップ注文をいれるプログラムです // 修正履歴 // 2011.04.11 オーダのコメントを追加(OrderDelと連動) // 変数の宣言 // extern:パラメータとして、利用者が入力できます // string:文字列 // doubule:小数点ありの数値 // int:小数点なしの数値 extern string OrdComL= "↓コメント"; extern string OrdCom="2011.04.12-1"; extern string OrdLongShortL= "↓1:ロング、2:ショート"; extern int OrdLongShort=2; extern string OrdKindL= "↓1:指値、2:逆指値"; extern int OrdKind=2; extern string OrdRateL= "↓指値 または 逆指値"; extern double OrdRate=86.47; extern string PosiCntL= "↓ポジ数"; extern int PosiCnt=3; extern string TrapHabaL= "↓トラップ幅"; extern double TrapHaba =0.1; extern string RikakuHabaL= "↓利確幅(利確指定しない時は0)"; extern double RikakuHaba =0.5; extern string StopRateL= "↓損切りレート(損切り指定しない時は0)"; extern double StopRate = 0; extern string LotsL= "↓ロット数(1=10万通貨)"; extern double Lots =0.01; extern string SlippageL= "↓スリッページ"; extern double Slippage =10; // マジックナンバー int MAGICNO = 0; // 決済rate double KessaiRate = 0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ //↓起動時に一度だけ動くプラグラムです。 //↓初期処理開始 int init() { // 指値 double Rate = OrdRate; // for(aaa ; bbb ; ccc) : 繰り返し処理。 // aaaの部分:初期処理を記述します。iという変数を宣言。初期値は0。 // bbbの部分:処理の条件を記述します。i < PosiCnt の条件を満たす間、繰り返します。 // cccの部分:後処理を記述します。1回処理を行うたびに、iに1ずつ加算します。 //  ロングの指値 if ( OrdLongShort == 1 && OrdKind == 1 ) { if (Rate > Ask) { Alert("err"); } else { for(int i=0 ; i < PosiCnt ; i++) { MAGICNO = Rate * 100; // 利確注文しない場合は、KessaiRateに0を設定 if ( RikakuHaba == 0) { //Alert("case 1"); KessaiRate = 0; } // 利確注文する場合は、KessaiRateに該当のレートを設定 else { //Alert("case 2"); KessaiRate = Rate+RikakuHaba; } // 新規注文 if(OrderSend(Symbol(),OP_BUYLIMIT,Lots,Rate,Slippage,StopRate,KessaiRate,OrdCom,MAGICNO,0,CLR_NONE) > 0) { Rate = Rate - TrapHaba; } } } } //  ロングの逆指値 else if ( OrdLongShort == 1 && OrdKind == 2 ) { if (Rate < Ask) { Alert("err"); } else { for( i=0 ; i < PosiCnt ; i++) { MAGICNO = Rate * 100; // 利確注文しない場合は、KessaiRateに0を設定 if ( RikakuHaba == 0) { //Alert("case 3"); KessaiRate = 0; } // 利確注文する場合は、KessaiRateに該当のレートを設定 else { //Alert("case 4 kessairate: ",KessaiRate); KessaiRate = Rate + RikakuHaba; } // 新規注文 if(OrderSend(Symbol(),OP_BUYSTOP,Lots,Rate,Slippage,StopRate,KessaiRate,OrdCom,MAGICNO,0,CLR_NONE) > 0) { Rate = Rate + TrapHaba; } } } } //  ショートの指値 else if ( OrdLongShort == 2 && OrdKind == 1 ) { if (Rate < Bid) { Alert("err"); } else { for( i=0 ; i < PosiCnt ; i++) { MAGICNO = Rate * 100; // 利確注文しない場合は、KessaiRateに0を設定 if ( RikakuHaba == 0) { //Alert("case 5"); KessaiRate = 0; } // 利確注文する場合は、KessaiRateに該当のレートを設定 else { //Alert("case 6"); KessaiRate = Rate - RikakuHaba; } // 新規注文 if(OrderSend(Symbol(),OP_SELLLIMIT,Lots,Rate,Slippage,StopRate,KessaiRate,OrdCom,MAGICNO,0,CLR_NONE) > 0) { Rate = Rate + TrapHaba; } } } } //  ショートの逆指値 else if ( OrdLongShort == 2 && OrdKind == 2 ) { if (Rate > Bid) { Alert("err"); } else { for( i=0 ; i < PosiCnt ; i++) { MAGICNO = Rate * 100; // 利確注文しない場合は、KessaiRateに0を設定 if ( RikakuHaba == 0) { //Alert("case 7"); KessaiRate = 0; } // 利確注文する場合は、KessaiRateに該当のレートを設定 else { //Alert("case 8"); KessaiRate = Rate - RikakuHaba; } // 新規注文 if(OrderSend(Symbol(),OP_SELLSTOP,Lots,Rate,Slippage,StopRate,KessaiRate,OrdCom,MAGICNO,0,CLR_NONE) > 0) { Rate = Rate - TrapHaba; } } } } //---- return(0); } //↑初期処理終了 // 一度動いたら終了 int start() { return(0); }