• 締切済み

一日2回ポジションを持つにはどうしたらいいですか?

以前に、質問投稿した事があります。火曜から金曜日まで動かして、一日に2回だけ売買するにはどうすればいいのかわからなくて困ってます。宜しくお願いします。 --------------------------------------------------- extern string X = "Basic Settings"; //基本設定 extern int MagicNumber = 10011; //マジックナンバー extern double TakeProfit = 200; //リミット[pips] extern double StopLoss = 150; //ストップ[pips] extern double Lots = 0.1; //ロットサイズ extern int Cmd = OP_BUY; //エントリー方法[OP_BUY/OP_SELL] extern int Slippage = 30; //スリッページ extern string XX = "Order Settings"; //新規注文設定 extern bool CheckOrderDayOfWeek = false; //曜日の判定有無 extern int OrderDayOfWeek = 1; //曜日 extern bool CheckOrderHour = true; //時間の判定有無 extern int OrderHour = 7; //時間 extern bool CheckOrderMinute = true; //分の判定有無 extern int OrderMinute = 5; //分 extern bool CheckOrderSeconds = true; //秒の判定有無 extern int OrderSeconds = 0; //秒 extern string XXX = "Close Settings"; //決済注文設定 extern bool CheckCloseHour = true; //時間の判定有無 extern int CloseHour = 7;//時 //時間 extern bool CheckCloseMinute = true; //分の判定有無 extern int CloseMinute = 40;//分 //分 extern bool CheckCloseSeconds = true; //秒の判定有無 extern int CloseSeconds = 0;//秒 //秒 //+------------------------------------------------------------------+ //| 開始関数 | //+------------------------------------------------------------------+ int start() { if(OrdersTotal() == 0){ if((TimeDayOfWeek(TimeCurrent()) == OrderDayOfWeek || CheckOrderDayOfWeek == false) &&(TimeHour(TimeCurrent()) == OrderHour || CheckOrderHour == false) &&(TimeMinute(TimeCurrent()) == OrderMinute || CheckOrderMinute == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds || CheckOrderSeconds == false)) { if(Cmd == OP_BUY){ OrderSend(Symbol(), Cmd,Lots, Ask, Slippage, Ask-StopLoss*Point, Ask+TakeProfit*Point, "", MagicNumber, 0, Red); return(0); } if(Cmd == OP_SELL){ OrderSend(Symbol(), Cmd,Lots, Bid, Slippage, Bid+StopLoss*Point, Bid-TakeProfit*Point, "", MagicNumber, 0, Blue); return(0); } } } if((TimeDayOfWeek(TimeCurrent()) == OrderDayOfWeek || CheckOrderDayOfWeek == false) &&(TimeHour(TimeCurrent()) == CloseHour || CheckCloseHour == false) &&(TimeMinute(TimeCurrent()) == CloseMinute || CheckCloseMinute == false) &&(TimeSeconds(TimeCurrent()) == CloseSeconds || CheckCloseSeconds == false)) { for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) { break; } if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Yellow); return(0); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Lime); return(0); } } } } return(0); }

みんなの回答

  • Saitar
  • ベストアンサー率41% (192/464)
回答No.2

> 例えば 8時00分にエントリー、8時30分にクローズ 9時15分にエントリー、9時30分にクローズ 失礼ながら、単純にそういうことであれば、これだけのプログラムを書けるあなたなら(あなたが書いたのですよね?)難なく機能追加できると思うのですが。 (1)あなたがオリジナルを書いたのなら、勉強のためぜひ機能追加を勧めます。これからも自分の戦略をカタチにするには数々の壁が発生します。それを乗り越えるのが、EA作成の醍醐味です。 (2)オリジナルをどっかから持ってきたのなら(先日の危険因子を考えるとどっかに転がっていたEAとは思えませんが、、、)、やはり勉強して今のEAを理解することを勧めます。 結論は一緒です。

全文を見る
すると、全ての回答が全文表示されます。
  • Saitar
  • ベストアンサー率41% (192/464)
回答No.1

どんな時に(何をトリガに)1日に2回に設定するのかが分からないので、回答不能です。 そもそも、提示されているプログラムで十分に時間設定できますよね? 良かったら、2回に制限する目的を教えて下さい。 (例) ・あんまり儲け過ぎるとお金にルーズになるから。 ・年齢的に1日に2回が限度だから。

murcielago_1229
質問者

補足

例えば 8時00分にエントリー、8時30分にクローズ 9時15分にエントリー、9時30分にクローズ といった感じです。よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ポジションを同時に2個持つのを直したい

    //+------------------------------------------------------------------+ //| パラメータ | //+------------------------------------------------------------------+ extern string X = "Basic Settings"; //基本設定 extern int MagicNumber = 10011; //マジックナンバー extern double TakeProfit = 200; //リミット[pips] extern double StopLoss = 150; //ストップ[pips] extern double Lots = 0.1; //ロットサイズ extern int Cmd = OP_BUY; //エントリー方法[OP_BUY/OP_SELL] extern int Slippage = 30; //スリッページ extern string XX = "Order Settings"; //新規注文設定 extern bool CheckOrderHour = true; //時間の判定有無 extern int OrderHour = 7; //時間 extern bool CheckOrderMinute = true; //分の判定有無 extern int OrderMinute = 5; //分 extern bool CheckOrderSeconds = true; //秒の判定有無 extern int OrderSeconds = 0; //秒 extern string XXX = "Close Settings"; //決済注文設定 extern bool CheckCloseHour = true; //時間の判定有無 extern int CloseHour = 7;//時 //時間 extern bool CheckCloseMinute = true; //分の判定有無 extern int CloseMinute = 40;//分 //分 extern bool CheckCloseSeconds = true; //秒の判定有無 extern int CloseSeconds = 0;//秒 //秒 //+------------------------------------------------------------------+ //| 開始関数 | //+------------------------------------------------------------------+ int start() { if((TimeHour(TimeCurrent()) == OrderHour || CheckOrderHour == false) &&(TimeMinute(TimeCurrent()) == OrderMinute || CheckOrderMinute == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds || CheckOrderSeconds == false)) { if(Cmd == OP_BUY){ OrderSend(Symbol(), Cmd,Lots, Ask, Slippage, Ask-StopLoss*Point, Ask+TakeProfit*Point, "", MagicNumber, 0, Red); return(0); } if(Cmd == OP_SELL){ OrderSend(Symbol(), Cmd,Lots, Bid, Slippage, Bid+StopLoss*Point, Bid-TakeProfit*Point, "", MagicNumber, 0, Blue); return(0); } } if((TimeHour(TimeCurrent()) == CloseHour || CheckCloseHour == false) &&(TimeMinute(TimeCurrent()) == CloseMinute || CheckCloseMinute == false) &&(TimeSeconds(TimeCurrent()) == CloseSeconds || CheckCloseSeconds == false)) { for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) { break; } if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Yellow); return(0); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Lime); return(0); } } } } return(0); }

  • 2回目のエントリーで時間通りにクローズ出来ない

    以前の質問内容からパラメーターをコピーし_2にしてからstart関数内に 同じようにコピーしましたが、2回目のエントリーの後、時間通りに決済ができません。 どなたか対策案教えてください。ここまでできるようになりましたが本当に困っております。 ----------------------------- int start() { if(OrdersTotal() == 0){ if((TimeHour(TimeCurrent()) == OrderHour || CheckOrderHour == false)&&(TimeMinute(TimeCurrent()) == OrderMinute || CheckOrderMinute == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds || CheckOrderSeconds == false)) { if(Cmd == OP_BUY){ OrderSend(Symbol(),Cmd,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Red); return(0); } if(Cmd == OP_SELL){ OrderSend(Symbol(),Cmd,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Blue); return(0); } } } if((TimeHour(TimeCurrent()) == CloseHour || CheckCloseHour == false)&&(TimeMinute(TimeCurrent()) == CloseMinute || CheckCloseMinute == false)&&(TimeSeconds(TimeCurrent()) == CloseSeconds || CheckCloseSeconds == false)) { for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) { break; } if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow); return(0); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Lime); return(0); } } } } if(OrdersTotal() == 0){ if((TimeHour(TimeCurrent()) == OrderHour_2 || CheckOrderHour_2 == false)&&(TimeMinute(TimeCurrent()) == OrderMinute_2 || CheckOrderMinute_2 == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds_2 || CheckOrderSeconds_2 == false)) { if(Cmd_2 == OP_BUY){ OrderSend(Symbol(),Cmd_2,Lots_2,Ask,Slippage_2,Ask-StopLoss_2*Point,Ask+TakeProfit_2*Point,"",MagicNumber_2,0,Red); return(0); { if(Cmd_2 == OP_SELL){ OrderSend(Symbol(),Cmd_2,Lots_2,Bid,Slippage_2,Bid+StopLoss_2*Point,Bid-TakeProfit_2*Point,"",MagicNumber_2,0,Blue); return(0); } } } if((TimeHour(TimeCurrent()) == CloseHour_2 || CheckCloseHour_2 == false)&&(TimeMinute(TimeCurrent()) == CloseMinute_2 || CheckCloseMinute_2 == false)&&(TimeSeconds(TimeCurrent()) == CloseSeconds_2 || CheckCloseSeconds_2 == false)) { for(int s = 0; s < OrdersTotal(); s++) { if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES) == false) { break; } if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_2) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,Slippage_2,Yellow); return(0); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,Slippage_2,Lime); return(0); } } } } return(0); } } }

  • 初心者です。ポジションが上手く決済されません。

    FastMaとSlowMaのGC・DCでポジションを持ちSL・TPで決済したいのですが 反対のポジションを持ったときに決済してしまいます。 どこがダメなのでしょうか? 初歩的なことだと思いますが、一週間悩んでも分りませんでした。 よろしくお願いします。 //| パラメーター extern int FastMA_Period = 4; extern int SlowMA_Period = 8; extern double Lots = 0.1; extern int Slippage = 3; extern int SLpips = 150; // 損切り値幅(pips) extern int TPpips = 80; // 利食い値幅(pips) //| ポジションを決済する void ClosePositions() { for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break; if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()) continue; //オーダータイプのチェック if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White); break; } if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White); break; } } } //| スタート関数 int start() { //バーの始値でトレード可能かチェック if(Volume[0]>1 || IsTradeAllowed()==false) return(0); //移動平均の計算 double FastMA1 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,1); double SlowMA1 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,1); double FastMA2 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,2); double SlowMA2 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,2); //買いシグナル if(FastMA2 <= SlowMA2 && FastMA1 > SlowMA1) { ClosePositions(); OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-SLpips*Point,0,"",MAGIC,0,Blue); return(0); } //売りシグナル if(FastMA2 >= SlowMA2 && FastMA1 < SlowMA1) { ClosePositions(); OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+SLpips*Point,0,"",MAGIC,0,Red); return(0); } return(0); }

  • MT4のOrderSendでエラーになります…

    以下のように、OrderSendで新規注文を行うプログラムを作成してみましたが、GetLastError()でエラー(4055)になってしまいます。 4055は、「カスタムインジケータエラー」とのことですが、どのように修正すればよいのか分かりません。 どうか、ご教示頂きたくよろしくお願い致します。 ちなみに、FXDD(デモ口座)のEURJPY(5分足)でテストしています。 bool EFlg=true; int start() { if(EFlg) { EAticket = OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order #2",16384,0,Green); if(EAticket < 0 ) Alert("Order Failed #",GetLastError()); else Alert("OK!!"); EFlg = false; } return(0); }

  • 豊島久道著「FXメタトレーダー実践プログラミング」

    お世話になります。 この著書の207ページの真ん中あたりに出てくる内容なんですが・・・ if (OrderSend (Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0) ! = -1 return (true) ; int err = GetLastError() ; Print("[OrderSendError] : ", err , "", ErrorDescription(err) ); こうしておくと、もし注文が約定した場合にはreturn文で関数を終了させてエラーメッセージが表示されないとのことです。 このreturn(true)というのはどこに返るんですか? start()関数はint型なので、「true」を返されても困りますよね? 「関数を終了させて」の「関数」とはどれなんでしょうか? 私の周囲にプログラムに詳しい方が皆無で、私自身もプログラムは初めてで、この箇所で悩みまくってしまいました>< どうぞよろしくお願いいたします。 ↓下は、著者のサイトで無料で公開されているライブラリ化されたトレード関数の一部なんですが、下から10行目あたりにも同じ表現があります。 // 注文を送信する bool MyOrderSend(int type, double lots, double price, int slippage, double sl, double tp, string comment, int magic) { price = NormalizeDouble(price, Digits); sl = NormalizeDouble(sl, Digits); tp = NormalizeDouble(tp, Digits); int starttime = GetTickCount(); while(true) { if(GetTickCount() - starttime > MyOrderWaitingTime*1000) { Alert("OrderSend timeout. Check the experts log."); return(false); } if(IsTradeAllowed() == true) { RefreshRates(); if(OrderSend(Symbol(), type, lots, price, slippage, sl, tp, comment, magic, 0, ArrowColor[type]) != -1) return(true); int err = GetLastError(); Print("[OrderSendError] : ", err, " ", ErrorDescription(err)); if(err == ERR_INVALID_PRICE) break; if(err == ERR_INVALID_STOPS) break; } Sleep(100); } return(false); }

  • メタトレーダー

    初歩的な質問ですみませんが、どなたか教えてください。メタトレーダーのEAプログラムについてです。 (1) エントリー時に移動平均線の傾きの角度を制限したいので下記のようにしました。 extern double MA_Period = 20; // MAの足数 extern double kaikatamuki = 40; //買いのMA逆傾き制限(%)必ず99以下で extern double urikatamuki = 40; //売りのMA逆傾き制限(%)必ず99以下で ~ ここに色々式がありまして・・・・ ~ //MA傾きの計算 ma1 = iMA(NULL, 0, MA_Period,0, MODE_SMA, PRICE_CLOSE, j); ma2 = iMA(NULL, 0, MA_Period,0, MODE_SMA, PRICE_CLOSE, j+1); katamuki1 = ma1/ma2*100; katamuki2 = ma2/ma1*100; //katamuki1 = ma1-ma2;←これは差を求めるために作っただけ //katamuki2 = ma2-ma1; ←これは差を求めるために作っただけ //オープンポジションの計算 int pos = CalculateCurrentOrders(); //売りシグナル if (pos>=0 && k==llb && katamuki1<kaikatamuki) { ClosePositions(); OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+TrailingStop1*Point,Bid-TakeProfit*Point,””,MAGIC,0,Red); return(0); } //買いシグナル if (pos<=0 && k==hhb && katamuki2<urikatamuki) { ClosePositions(); OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-TrailingStop1*Point,Ask+TakeProfit*Point,””,MAGIC,0,Blue); return(0); } しかし、compileはできたのですが、実際のバックテストでは約定しません。kaikatamukiとurikatamukiを100以上にすれば約定するのですが、理屈が反対になるのでダメです。また、大きい傾き時のみのエントリーを計画しているのですが、傾きが緩やかな時も約定してしまいます。何が間違っているのでしょうか?または、傾きの有る無いしか作れないのでしょうか? (2)上記にあるOrderSendのStopLossの所にTrailingStopを最初から適用すると約定しません。StopLossを入れると約定します。上記ではTrailingStop1となっていますが、1をつけなくてもダメでした。私としてはOrderSendで TrailingStop を入れて、ある一定の利益が出たらOrderModifyで新たな TrailingStopを設定したいと思っていました。これはダメなんでしょうか? (3)上記とは違いますが例えば、Supersignalの矢印が出てから何本目の足以内にMACDCrossが出たらエントリーというような、「これが成立してから足何本以内にこれが成立したら」が書けません。forexでstatic int barsAtStart;を見つけましたが、これまた動きません。 長々と申し訳ありません。よろしくお願いいたします。

  • これは文字化けしている状態なのでしょうか?

    //+------------------------------------------------------------------+ //| Indexes_v7L.mq4 | //| Copyright ゥ 2008, Xupypr | //+------------------------------------------------------------------+ #property copyright "Copyright ゥ 2008, Xupypr" #property indicator_separate_window #property indicator_buffers 8 #property indicator_level1 100 #property indicator_level2 -100 #property indicator_levelcolor LightSlateGray #property indicator_color1 Lime #property indicator_color2 DodgerBlue #property indicator_color3 Red #property indicator_color4 Yellow #property indicator_color5 DeepPink #property indicator_color6 DarkOrange #property indicator_color7 MediumSpringGreen #property indicator_color8 LightSkyBlue #property indicator_width1 1 #property indicator_width2 1 #property indicator_width3 1 #property indicator_width4 1 #property indicator_width5 1 #property indicator_width6 1 #property indicator_width7 1 #property indicator_width8 1 //---- input parameters extern string start_time="2006.12.29 22:59"; // ・iv (・淲・糂・竟蒟・・粹・100%) extern bool use_start_time=false; // 頌・・鉋籵 ・iv, 竟璞・碣瑣・燾 鈞・靑・ 淲蒟・ extern bool auto_detect_pair=false; // i蒟・ 珞・・籵・・ ・ ・iv髜赳 iv粢糒・竟蒟・・ extern bool diff_indicators=false; // 頸瑣・鈿iii 竟蒟・魵/竟蒻・・・跖・ "珞i蒟・湜" ・ extern bool reverse_index=false; // "・粽籵" 竟蒟・ 籵・, ・・・・ 糘ii鵫 extern int applied_price=0; // 頌・・銛褌・ 浯: 0-CLOSE; 1-OPEN; 2-HIGH; 3-LOW; 4-MEDIAN; 5-TYPICAL; 6-WEIGHTED; extern int ma_period=1; // ・鮏 蓖褊・ 蓁 糺褊・ 鸙・胛 裝淲胛 extern int ma_method=3; // ・・蓖褊・: 0-MODE_SMA; 1-MODE_EMA; 2-MODE_SMMA; 3-MODE_LWMA extern int select_indicator=0; // 0-竟蒟・・籵・・砒・竟蒻・・ 1-CCI; 2-RSI; 3-Momentum; 4-MACD; 5-Stochastic; extern int period_indicator=14; // ・鮏 蓖褊・ 蓁 糺褊・ 竟蒻・ extern int fast_EMA=12; // 蓁 竟蒻・ MACD extern int slow_EMA=26; // 蓁 竟蒻・ MACD extern int k_period=5; // 蓁 竟蒻・ Stochastic extern int slowing=3; // 蓁 竟蒻・ Stochastic extern bool show_USD=true; extern bool show_EUR=true; extern bool show_GBP=true; extern bool show_JPY=true; extern bool show_CHF=true; extern bool show_AUD=true; extern bool show_CAD=true; extern bool show_NZD=true; //---- buffers double iUSDBuffer[]; double iEURBuffer[]; double iGBPBuffer[]; double iJPYBuffer[]; double iCHFBuffer[]; double iAUDBuffer[]; double iCADBuffer[]; double iNZDBuffer[]; double xUSDBuffer[]; double xEURBuffer[]; double xGBPBuffer[]; double xJPYBuffer[]; double xCHFBuffer[]; double xAUDBuffer[]; double xCADBuffer[]; double xNZDBuffer[]; //---- indicator buffers double USDBuffer[]; double EURBuffer[]; double GBPBuffer[]; double JPYBuffer[]; double CHFBuffer[]; double AUDBuffer[]; double CADBuffer[]; double NZDBuffer[]; //---- indicator parameters int i,BarsCS,LB; bool Show_CUR[8],Stop=false; double SPrice[7]; string CS1,CS2; string Currency[8]={"USD","EUR","GBP","JPY","CHF","AUD","CAD","NZD"}; string Symbols[7]={"AUDUSD","EURUSD","GBPUSD","NZDUSD","USDCAD","USDCHF","USDJPY"}; datetime Period_End,SPoint; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int SBar,STime[8]; bool Show=false; string Name; Comment(""); if (Period()==PERIOD_MN1) { Comment("マ褞韶・淲 ・趺・磊 碚・ W1"); Stop=true; return(-1); } if (auto_detect_pair) { ArrayInitialize(Show_CUR,false); CS1=StringSubstr(Symbol(),0,3); CS2=StringSubstr(Symbol(),3,3); for (i=0;i<8;i++) { if (Currency[i]==CS1 || Currency[i]==CS2) { Show_CUR[i]=true; Show=true; } } if (Show==false) { ArrayInit

  • 判定の仕方

    みなさんifなどの false(FALSE) 0 NULL "" などをtureとするとき、判定分をどう書きますか? 私はreturn値を明示するために if($val === false) //true if($val === 0) //true if($val === NULL) //true if($val === "") //true とします。 スマートなのは if(!$val) //true なんですけど、複合型を返す関数の判定は気持ち悪くて使ってないです。 複合型の判定は if(empty($val)) //true としてます。 みなさんはどっちをつかいますか? また、 if($val == false) //true と書いたりしますか? C育ちの私にとってはとても気持ち悪くて絶対に書かないだろう判定の仕方なんですけど、なにかメリットなどがあったら教えてください。

    • ベストアンサー
    • PHP
  • 変数の定義もれ?

    稚拙なEAをつくってみました。変数が定義されていない箇所が一か所あるというエラーメッセージがでます。売りポジションのストップロスあたりのようなのですが、どこかわかりません。どなたかよろしくお願いいたします。(安易に聞くなと怒られそうですが、3日考えてもわかりません。よろしくお願いします。) ?????????????????????????????????????????????????????????????????????????? //パラメーターの設定// extern double Lots = 1.0; //取引ロット数 extern int Slip = 10; //許容スリッページ数 extern string Comments = ""; //コメント extern int TP =20 ; //利益確定ポイント数 extern int SL =15 ; //ストップロスポイント数 //変数の設定// int Ticket_L = 0; //買い注文の結果をキャッチする変数 int Ticket_S = 0; //売り注文の結果をキャッチする変数 int Exit_L = 0; //買いポジションの決済注文の結果をキャッチする変数 int Exit_S = 0; //売りポジションの決済注文の結果をキャッチする変数 double st_2_60 = 0; //60分足の2本前のバーのストキャスティクス double st_1_60 = 0; //60分足の1本前のバーのストキャスティクス double st_2_15 =0; //15分足の2本前のバーのストキャスティクス double st_1_15 =0; //15分足の1本前のバーのストキャスティクス double signal_2_60 =0; //60分足の2本前のバーのシグナル double signal_1_60 =0; //60分足の1本前のバーのシグナル double signal_2_15= 0; //15分足の2本前のバーのシグナル double signal_1_15= 0; //15分足の1本前のバーのシグナル int start() { st_2_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,0,2); st_1_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,0,1); st_2_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,0,2); st_1_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,0,1); signal_2_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,1,2); signal_1_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,1,1); signal_2_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,1,2); signal_1_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,1,1); //買いポジションの利益確定 OrderSelect(Ticket_L,SELECT_BY_TICKET); if( (OrderOpenPrice()+TP*Point<=Bid) &&(Ticket_L != 0 && Ticket_L != -1 )) { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if( Exit_L ==1 ) {Ticket_L = 0;} } //売りポジションの利益確定 OrderSelect(Ticket_S,SELECT_BY_TICKET); if( (OrderOpenPrice()-TP*Point>=Ask) &&(Ticket_S!= 0 && Ticket_S != -1 )) { Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if( Exit_S==1 ) {Ticket_S = 0;} } //買いポジションのストップロス OrderSelect(Ticket_L,SELECT_BY_TICKET); if( (OrderOpenPrice()-SL*Point>=Bid) &&(Ticket_L!=0 && Ticket_L!=-1)) { Exit_L=OrderClose(Ticket_L,Lots,Bid,Slip,Red); if(Exit_L==1){Ticket_L=0;}   //売りポジションのストップロス OrderSelect(Ticket_S,SELECT_BY_TICKET); if( (OrderOpenPrice()+SL*Point<=Ask) &&(Ticket_S != 0 && Ticket_S != -1)) { Exit_S=OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if(Exit_S==1){Ticket_S=0;} //買いポジションのエグジット if( st_1_15 <= 25 && Ticket_L != 0 && Ticket_L != -1) { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if( Exit_L ==1 ) {Ticket_L = 0;} } //売りポジションのエグジット if( st_1_15 >=75 && Ticket_S != 0 && Ticket_S != -1 ) { Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if( Exit_S ==1 ) {Ticket_S = 0;} } //買いエントリー if( st_2_60 > 20 && st_1_60 > st_2_60 && st_1_60 < 70 && st_2_15 > 20 && st_1_15 > st_2_15 && st_1_15 < 70 && st_1_15 >= signal_1_15 && ( Ticket_L == 0 || Ticket_L == -1 ) && ( Ticket_S == 0 || Ticket_S == -1 )) { Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); } //売りエントリー if( st_2_60 < 80 && st_1_60 < st_2_60 && st_1_60 >30 && st_2_15 < 80 && st_1_15 <= st_2_15 && st_1_15 <= signal_1_15 && ( Ticket_S == 0 || Ticket_S == -1 ) && ( Ticket_L == 0 || Ticket_L == -1 )) { Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue); } return(0); } // the end.

  • クリックされた地点が2点の線分上かの判定

    bool CheckOnline(int x1,int y1,int x2,int y2,int MouseX,int MouseY){ int range = 10; //許容範囲 double a; double b; if(x2 == x1){ if( abs( MouseX -x1)<range ){ if( abs(MouseY -abs(y2-y1)) <range) return true; } }else{ a=(y2-y1)/(x2-x1); b= y1 - a*x1; if( abs(MouseY - (a * MouseX +b)) <range ){ if( abs(MouseX - ((MouseY-b)/a)) <range ) return true; } } return false; } ぴったりでなく少し誤差があっても線上と判定したいです。 上記の方法ではうまく行きませんでした。 一応、y=ax+bのaとbを求めて、マウスのxとマウスのyを代入 その結果がrange以内かどうかでやってみようとした結果です。