//+------------------------------------------------------------------+ //| Switch.mq4 | //| Copyright ゥ 2010, Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright ゥ 2010, Software Corp." #property link "http://www.metaquotes.net" /* EURAUDのレートにより、 EURJPYロングを決済、 AUDJPYロングを新規 注文する。 */ // パラメータ入力 extern string CloseTicketL= "↓決済ポジのチケット番号"; extern int CloseTicket=14674895; extern string SwitchRateL= "↓スイッチするEURAUDのレート"; extern double SwitchRate=1.38; extern string SlippageL= "↓スリッページ"; extern double Slippage =10; extern string LotsL= "↓AUDJPYロングのロット数(1=10万通貨)"; extern double Lots =0.02; //↓マジックナンバーには、建値を設定する(スリップを含まない値) int MAGICNO; string SymbolAudjpy = "AUDJPYFXF"; string SymbolEurjpy = "EURJPYFXF"; int err; int FlgEnd=0; int FlgAudjpyLongNG=0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ //↓初期処理開始 int init() { //----開始メッセージ出力 Alert(""); Alert(WindowExpertName(),"*** start ***"); //---- return(0); } //↑初期処理終了 //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ //↓通常処理開始 int start() { double AUDJPYask = 0; ////////////////////////////// // 処理終了したら、動かさない。 ///////////////////////////// if ( FlgEnd == 1 ) { return(0); } ////////////////////////////////////////////////// // audjpyロング失敗の場合は、Audjpyロングのみ行う。 ////////////////////////////////////////////////// if ( FlgAudjpyLongNG == 1 ) { // AUDJPY レート把握 AUDJPYask =MarketInfo(SymbolAudjpy,MODE_ASK); MAGICNO = AUDJPYask * 100; // AUDJPYロングを新規 if(OrderSend(SymbolAudjpy,OP_BUY,Lots,AUDJPYask,Slippage,0,0,"switch",MAGICNO,0,CLR_NONE)>0) { // メール送信 mail("AUDJPY SINKI OK"); Alert("AUDJPY SINKI OK"); // 処理終了 FlgEnd = 1; } // AUDJPYロング失敗 else { err=GetLastError(); mail("AUDJPY SINKI NG err:"+err); Alert("AUDJPY SINKI NG err:" +err); } return(0); } //////////// // 通常処理 /////////// // euraud 上昇したら if(Bid > SwitchRate) { // eurjpy レート把握 double EURJPYbid =MarketInfo(SymbolEurjpy,MODE_BID); // チケット番号から決済ポジを検索 if (OrderSelect(CloseTicket,SELECT_BY_TICKET) == true) { // eurjpyロングを決済 if ( OrderClose(OrderTicket(),OrderLots(),EURJPYbid,Slippage,CLR_NONE)> 0) { // メール送信 mail("EURJPY KESSAI OK"); Alert("EURJPY KESSAI OK"); // AUDJPY レート把握 AUDJPYask =MarketInfo(SymbolAudjpy,MODE_ASK); // AUDJPYロングを新規 MAGICNO = AUDJPYask * 100; if(OrderSend(SymbolAudjpy,OP_BUY,Lots,AUDJPYask,Slippage,0,0,"switch",MAGICNO,0,CLR_NONE)>0) { // メール送信 mail("AUDJPY SINKI OK"); Alert("AUDJPY SINKI OK"); // 処理終了 FlgEnd = 1; FlgAudjpyLongNG = 0; } // AUDJPYロング失敗 else { err=GetLastError(); mail("AUDJPY SINKI NG err:"+err); Alert("AUDJPY SINKI NG err:"+err); FlgAudjpyLongNG = 1; } } // OrderClose 失敗 else { err=GetLastError(); mail("EURJPY KESSAI NG err:"+err); Alert("EURJPY KESSAI NG err:"+err); } } // OrderSelect 失敗 else { err = GetLastError(); mail("OrderSelect ng err:" + err); Alert("OrderSelect ng err:",err); } } return(0); } //↑通常処理終了 //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ // int deinit() { //---- Alert(""); Alert("*** stop ***"); //---- return(0); } //+------------------------------------------------------------------+ // メール内容を別メソッド化 //+------------------------------------------------------------------+ // int mail(string word) { SendMail(WindowExpertName(), AccountServer() + Symbol() + " Bid: "+ Bid + " Ask: "+Ask + " word:" + word); return(0); }