どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 64 1...575859606162636465666768697071...1178 新しいコメント dmitrybiz 2013.08.03 14:33 #631 alexey1979621:フォーラムユーザーの皆様、大変お世話になります。 if (TimeBar==Time[0]) return(0); double MA1 = NormalizeDouble(iMA(NULL,TimeFrame_2,MA_Period_2,MA_Shift_2,MA_Method_2,Applied_Price_2,0),Digits); // ここで0は現在のバーから指定した分だけシフトしたものです。遡る期間数 //double MA21 = NormalizeDouble(iMA(NULL,timeframe_2,period_2,ma_shift_2,ma_method_2,applied_price_2,2),Digits);double MA2 = NormalizeDouble(iMA(NULL,timeFrame_3,MA_Period_3,MA_Shift_3,MA_Method_3,Applied_Price_3,0),Digits); //double MA31 = NormalizeDouble(iMA(NULL,timeframe_3,period_3,ma_shift_3,ma_method_3,applied_price_3,2),Digits)double MA3 = NormalizeDouble(iMA(NULL,TimeFrame_4,MA_Period_4,MA_Shift_4,MA_Method_4,Applied_Price_4,0),Digits); double OsMA = NormalizeDouble(iOsMA(NULL,TimeFrame_5,FastEMA_5,SlowEMA_5,SignalSMA_5,Applied_Price_5,0),Digits)if (MaxOrders>b && Low[0]>=MathMax(MA1,MA2)&& Low[0]>MA3 && Ask>)MathMax(MA1,MA2)+DeltaOpen*Point && Ask>MA3 && MA2<MA3 && MA1<MA3 && OsMA>0 && Trade){ if (OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,SL,TP, "Puria_1",Magic,0,Blue) ==-1) TimeBar=0; else TimeBar=Time[0]; } }.if (MaxOrders>s && High[0]<=MathMin(MA1,MA2) && High[0]<MA3 && Bid<)MathMin(MA1,MA2)-DeltaOpen*Point && Bid<MA3 && MA1>MA3 && MA2>MA3 && OsMA<0 && Trade){ if (OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,SL,TP, "Puria_1",Magic,0,Red) ==-1) TimeBar=0; else TimeBar=Time[0]; } }. return(0)です。この状態で、Expert Advisorは、例えば、SELLで取引を開始し、利益が出たらそれを決済し、すぐにSELLで別の取引を開始します。シグナルを受信したら、1つの取引を開始する、つまり1シグナル1ディールをEAで規定するにはどうしたらよいでしょうか。 よろしくお願いします。 1バリアント - どちらかの取引条件を確認するように:インデックス2は買いシグナルとインデックス1売りシグナルを示し、その後インデックス0とバーのオープニングで売りの契約を開きます。 2番目の方法は、注文履歴を 確認し、シグナルと注文の指標を比較し、同じであれば、それ以上注文を出さないことです。 Alexander 2013.08.03 14:37 #632 TimeBar変数はどこで、どのように初期化されるのですか? あなたの場合、あまり役には立ちませんが。トレードの変数を条件で見ているので、それで開きを調整してください。 Alekseu Fedotov 2013.08.03 15:14 #633 webman1988: 2日前から悩んでいて、わからないんです。過去n本のバーの最安値を求める必要がありますが、現在のバーからではなく、関数を通して受け取ったバーからです。この関数は、注文が開始されたバーのインデックスを返します。このバーから、n本のバーの履歴をさかのぼって、最安値を探す必要があります。以下は私のコードですが、どこが悪いのでしょうか? int n = 10; //баров в глубь истории index_bar= ND(iLow(Symbol(),0,i)); // начинаем с этого бара double val=Low[iLowest(NULL,0,MODE_LOW,n,index_bar)]; このように dmitrybiz 2013.08.03 17:20 #634 r772ra: というようなものです。 ありがとうございました。この関数も使ってみましたが、やはりループの中では、単純になることがわかりました )))いつもありがとうございます。 gyfto 2013.08.04 02:31 #635 FAQ: ジフト 次のような疑問があります。マウスホイールをインターセプトするには、どのようなwinapi関数を使用すればよいですか? その理由を説明しよう。externsにintパラメータがあります。増減させるには、ホイールを回転させる必要があります。 やり方がわかったら、投稿してください...。 これまでは、そういうことだったんですね。 #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 RoyalBlue #import "user32.dll" int GetKeyState(int nVirtKey);//обрабочик клавиатуры #import extern int period = 1; extern bool WinAPI = false;//включение-отключение перехвата клавиатуры extern string s1="Alt+ArrowUp - increment of period";//памятка extern string s2="Alt+ArrowDown - decrement of period"; extern string s3="Alt+Home - period=1"; double SMA[]; int Alt, ArrowUp, ArrowDown, Home; int init(){ SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,SMA); if(WinAPI){//запоминаем состояние клавиш Alt = GetKeyState(18); ArrowUp = GetKeyState(38); ArrowDown = GetKeyState(40); Home = GetKeyState(36); } return(0); } int deinit(){ if(WinAPI) Comment(" "); return(0); } int start(){ if(WinAPI){//ставим сконденсированный флаг и снова запоминаем состояние клавиш НА КАЖДОМ ТИКЕ int flag = ((Alt!=GetKeyState(18)) && Home==GetKeyState(36)) + 10*((Alt!=GetKeyState(18)) && (ArrowUp==GetKeyState(38))) + 100*((Alt!=GetKeyState(18)) && (ArrowDown==GetKeyState(40))); Alt = GetKeyState(18); ArrowUp = GetKeyState(38); ArrowDown = GetKeyState(40); Home = GetKeyState(36); } int counted_bars=IndicatorCounted(); if(WinAPI){//разводка сконденсированного флага; перед limit, чтобы отсюда эмулировать прикрепление к графику switch(flag){ case 11: if(period>1){ period--; counted_bars = 0; } break; case 101: period++; counted_bars = 0; break; case 110: period=1; counted_bars = 0; } } int limit = Bars - counted_bars - 1; /*Шпаргалка. В первый заход counted_bars = 0, limit = Bars - 1 (номер самого левого БАРа, т.к. считается с нуля) на первом тике нулевого бара counted_bars = Bars - 2, limit = 1 (пересчитаем предпоследний БАР) на следующих тиках counted_bars = Bars - 1, limit = 0 (нулевой, он же текущий, БАР)*/ if(WinAPI) Comment("flag=", flag, ", period=", period);//принтуем в коммент для визуализации for(int bar=0; bar<=period*(limit/period); bar++){//обычный цикл индикаторов SMA[bar] = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, bar); } return(0); } Рустам 2013.08.04 08:12 #636 面白いんじゃなくて、マウスホイールの乗っ取りが問題なんです :https://www.mql5.com/ru/forum/139237 gyfto 2013.08.04 08:16 #637 FAQ、このスレッドに連絡する前に見たので、その時の反応には驚かなかった) Рустам 2013.08.04 08:22 #638 この問題はフックの問題ですが、私はもっと簡単な方法で解決しました。必要であれば、DLLに独自の設定ウィンドウを作り、そこでWindowsのコントロールで好きなようにできるのです。 gyfto 2013.08.04 08:44 #639 VadimがMT4の下からフックを使うなと言ったように、プラットフォームがフックを嫌がるので、触らないようにしています。多分、何の意味もない) Vadim Zhunko 2013.08.04 09:10 #640 gyfto: VadimがMT4の下からフックを使うなと言ったように、プラットフォームがフックを嫌がるので、触らないようにしています。多分、何の意味もない) フックを嫌うのはMT4自身ですが、その中から(DLLから)他者にフックを適用することは可能です。 1...575859606162636465666768697071...1178 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
フォーラムユーザーの皆様、大変お世話になります。
if (TimeBar==Time[0]) return(0); double MA1 = NormalizeDouble(iMA(NULL,TimeFrame_2,MA_Period_2,MA_Shift_2,MA_Method_2,Applied_Price_2,0),Digits); // ここで0は現在のバーから指定した分だけシフトしたものです。遡る期間数 //double MA21 = NormalizeDouble(iMA(NULL,timeframe_2,period_2,ma_shift_2,ma_method_2,applied_price_2,2),Digits);double MA2 = NormalizeDouble(iMA(NULL,timeFrame_3,MA_Period_3,MA_Shift_3,MA_Method_3,Applied_Price_3,0),Digits); //double MA31 = NormalizeDouble(iMA(NULL,timeframe_3,period_3,ma_shift_3,ma_method_3,applied_price_3,2),Digits)double MA3 = NormalizeDouble(iMA(NULL,TimeFrame_4,MA_Period_4,MA_Shift_4,MA_Method_4,Applied_Price_4,0),Digits); double OsMA = NormalizeDouble(iOsMA(NULL,TimeFrame_5,FastEMA_5,SlowEMA_5,SignalSMA_5,Applied_Price_5,0),Digits)if (MaxOrders>b && Low[0]>=MathMax(MA1,MA2)&& Low[0]>MA3 && Ask>)MathMax(MA1,MA2)+DeltaOpen*Point && Ask>MA3 && MA2<MA3 && MA1<MA3 && OsMA>0 && Trade){ if (OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,SL,TP, "Puria_1",Magic,0,Blue) ==-1) TimeBar=0; else TimeBar=Time[0]; } }.if (MaxOrders>s && High[0]<=MathMin(MA1,MA2) && High[0]<MA3 && Bid<)MathMin(MA1,MA2)-DeltaOpen*Point && Bid<MA3 && MA1>MA3 && MA2>MA3 && OsMA<0 && Trade){ if (OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,SL,TP, "Puria_1",Magic,0,Red) ==-1) TimeBar=0; else TimeBar=Time[0]; } }.
return(0)です。
この状態で、Expert Advisorは、例えば、SELLで取引を開始し、利益が出たらそれを決済し、すぐにSELLで別の取引を開始します。シグナルを受信したら、1つの取引を開始する、つまり1シグナル1ディールをEAで規定するにはどうしたらよいでしょうか。
よろしくお願いします。
1バリアント - どちらかの取引条件を確認するように:インデックス2は買いシグナルとインデックス1売りシグナルを示し、その後インデックス0とバーのオープニングで売りの契約を開きます。
2番目の方法は、注文履歴を 確認し、シグナルと注文の指標を比較し、同じであれば、それ以上注文を出さないことです。
TimeBar変数はどこで、どのように初期化されるのですか?
あなたの場合、あまり役には立ちませんが。トレードの変数を条件で見ているので、それで開きを調整してください。
2日前から悩んでいて、わからないんです。過去n本のバーの最安値を求める必要がありますが、現在のバーからではなく、関数を通して受け取ったバーからです。この関数は、注文が開始されたバーのインデックスを返します。このバーから、n本のバーの履歴をさかのぼって、最安値を探す必要があります。以下は私のコードですが、どこが悪いのでしょうか?
このように
というようなものです。
ありがとうございました。この関数も使ってみましたが、やはりループの中では、単純になることがわかりました )))いつもありがとうございます。
ジフト
次のような疑問があります。マウスホイールをインターセプトするには、どのようなwinapi関数を使用すればよいですか? その理由を説明しよう。externsにintパラメータがあります。増減させるには、ホイールを回転させる必要があります。
やり方がわかったら、投稿してください...。
これまでは、そういうことだったんですね。
VadimがMT4の下からフックを使うなと言ったように、プラットフォームがフックを嫌がるので、触らないようにしています。多分、何の意味もない)