KimIVの便利な機能 - ページ 91 1...848586878889909192939495969798...128 新しいコメント TheXpert 2009.08.13 12:25 #901 CrossPointOfSections()関数です。 この関数は、2つのセグメントの交点の座標を計算します。 各セグメントは、その点座標の組で定義されます。3つの配列がパラメータとして関数に渡されます。 x- 横座標の配列.x[0],x[1]- 第1セグメントの横軸,x[2],x[3]- 第2セグメントの横軸, の4つの 要素を含む必要があります。 y- 座標の配列.y[0],y[1]- 第1セグメントの座標,y[0],y[1]- 第2セグメントの座標, の4つの 要素を含みます。 t- 探索する交点の座標の配列.関数が正常に実行されると,この配列には2つの 要素が含まれます.t[0] は2つの直線の交点の横座標,t[1] は同じ点の縦座標です. 結果は、セグメントが交差していれば真、交差していなければ偽と なります。セグメントが全体的または部分的に合同である場合、この関数は偽を 返します。 //+----------------------------------------------------------------------------+ //| Параметры: | //| x - массив абсцисс x[0], x[1] - первый отрезок | //| x[2], x[3] - второй отрезок | //| y - массив ординат y[0], y[1] - первый отрезок | //| y[0], y[1] - второй отрезок | //| t - массив искомых координат t[0] - абсцисса точки пересечения | //| t[1] - ордината точки пересечения | //| результат true если отрезки пересекаются | //| false если нет | //| примечание если отрезки не пересекаются, то в мас- | //| сив t[] передается точка пересечения | //| прямых, на которых лежат отрезки | //+----------------------------------------------------------------------------+ bool CrossPointOfSections(double& x[], double& y[], double& t[]) { double z=( y[3]- y[2])*( x[1]- x[0])-( y[1]- y[0])*( x[3]- x[2]); ArrayResize( t, 2); ArrayInitialize( t, 0.0); if ( z==0) { Print("CrossPointOfSections(): Не удалось найти точку пересечения!"); return (false); } double xy1= x[1]* y[0]- x[0]* y[1]; double xy2= x[3]* y[2]- x[2]* y[3]; t[0]=NormalizeDouble(( xy1*( x[3]- x[2])- xy2*( x[1]- x[0]))/ z, 0); t[1]=( xy1*( y[3]- y[2])- xy2*( y[1]- y[0]))/ z; if (( t[0] - x[0])*( t[0] - x[1]) > 0 || ( t[1] - y[0])*( t[1] - y[1]) > 0) return (false); if (( t[0] - x[2])*( t[0] - x[3]) > 0 || ( t[1] - y[2])*( t[1] - y[3]) > 0) return (false); return (true); } スクリプトはテスト用です。 ファイル: sectionscross_1.mq4 7 kb 「KimIVの便利な機能」のみ。 DDFedor 2009.08.13 12:51 #902 ありがとうございます。 Rid 2009.08.14 07:26 #903 こんにちは。最後のポジションをテイクまたはストップロスでクローズするフラグを返す関数についての質問です。 'KimIVからの便利な機能'。 関数 isCloseLastPosByTake().テイク上の最後のポジションをクローズするフラグを返します。フラグが立っている - True - TakeProfitが発動されました。フラグを下げた - False - その他の理由でポジションがクローズされた //--------------------------------------------------------------- 昨日、一般フォーラムでこんな質問をしました。しかし、今のところ答えはない。 私のExpert Advisorには3段階のマーチンゲールがあります。各ステップ(ポジション)には、それぞれのマジック(1,2,3)があります。 ポジションはシグナルやストップで決済されます。 このような閉め方も実施されています。 if ( isCloseLastPosByStop(NULL, OP_BUY, Magic_3)) //если посл. позиция //закрылась по тейкпрофиту, - то закрываем все позиции ClosePosFirstProfit(NULL,OP_BUY, -1); 私のExpert Advisorは、マーティゲールステップの最後の(最大の)ポジションがTake Profitでクローズされない限り、うまく機能する ことが判明しました。 そして、次の最初の位置(マジック1)が開かれると、isCloseLastPosByTake( )関数のフラグが1(1)のままなので、すぐに閉じられます ! そして、無限大に。開いたり閉じたりする。 さらに!ターミナルがこのフラグを記憶しており、EAを新たに削除/インストールしても(Magiksを変更するまで)役に立ちません。 すべてのポジションがクローズされた後、isCloseLastPosByTake() 関数をリセットする方法が必要です。 もう、脳みそが裏返るほどひねくれてるんですよ。うまくいかない!? イゴール!、または誰か(できる人)、どうすればいいのか、全くできないのか、教えてください。 Rid 2009.08.14 07:42 #904 私の疑問に対する答えが見つかったようです。ご興味のある方は、こちらへどうぞ。 目利きのための質問」。 Рита 2009.08.22 06:19 #905 KimIV >> : ModifyOrder()関数の使用例です。 これまで何度も聞かれたことのある、まさにその例を挙げることにしたのです。成行注文の実行という意味でのポジションのオープンです。 マーケットウォッチそれは、市場価格でポジションを建てる注文と、それに付随する保留注文を同時に出すことができない場合である。まず、ポジションを建て、そのポジションに注文を付け、StopLossとTakeProfitの価格レベルを設定します。 1.現在のシンボルを0.1ロット購入し、ストップを30ポイントに設定する。 2.現在のシンボルを0.15ロット売り、SL=45, TP=99とする。 int ti= OpenPosition(NULL, OP_SELL, 0.15); if (OrderSelect( ti, SELECT_BY_TICKET)) ModifyOrder(-1, Bid+45*Point, Bid-99*Point, clModifySell); 例題を含むワーキングスクリプトが予告編に含まれています。 イゴールさん、そして皆さん、おはようございます。これらの関数を私のEAに適用してみました。すべて順調にモディファイされています。EAにマジックを入れない限りは!? 全ポジションが正常にモディファイされます。ただし-。 OpenPosition()関数が魔法使いに気づかず、すべてのバーでポジションを1つずつオープンし続けるのはなぜでしょうか? すでに不要なものはすべて削除しています(コードの私のミスだと思いました)。 そして、コメントにはポジションの数を入れてください。 無駄なことです。明らかなポジションがある場合 - コメントはゼロを印刷します。 なぜ機能がマジシャンに見えないのかがわからない!以下はそのコードです。 extern int Magic = 7771; extern int StopLoss =200; extern int TakeProfit_Sell =200; extern double Lots_1 = 0.01;//размер лота //--------------------------------------------------------------------+ extern string _P_Performance = "- Параметры открытия позиций "; extern bool UseSound = True; //Использовать звуковой сигнал extern string NameFileSound = "expert.wav";//Наименование зву. файла откр. color clOpenBuy = Blue; // Цвет значка открытия покупки color clOpenSell = Red; // Цвет значка открытия продажи color clModifyBuy = Aqua; // Цвет значка модификации покупки color clModifySell = Tomato; // Цвет значка модификации продажи int Slippage = 10; // Проскальзывание цены int NumberOfTry = 10; // Количество попыток //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж //-- Подключаемые модули -- #include <stderror.mqh> #include <stdlib.mqh> //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж bool gbDisabled = False; // Флаг блокировки советника double SL, TP; int ti; static int prevtime = 0; //------------------------------------------------------------ int start() { Comment ("Количество откр. позиций = ", NumberOfPositions(NULL,OP_SELL, Magic)); if(Time[0] == prevtime) return(0);//ждём появления нового бара prevtime = Time[0];//если появился новый бар , включаемся //XXXXXXXXXXXXXXXXXXX ОТКРЫТИЕ ПОЗИЦИЙ ХХХХХХХХХХХХХХ if( NumberOfPositions(NULL,OP_SELL, Magic)<1){//если нет открытых селл- // позиций SL=0; TP=0;// задаем стопы if( StopLoss>0) SL=Bid+Point* StopLoss; if( TakeProfit_Sell>0) TP=Bid-Point* TakeProfit_Sell; //Открываем позицию селл ti= OpenPosition(NULL, OP_SELL, Lots_1, Magic); if (OrderSelect( ti, SELECT_BY_TICKET)) ModifyOrder(-1, SL, TP, clModifySell); } return (0); //-----------------Конец функции int start()------------------------- } // Пользовательские функции жжжжжжжжжжжжжжжжжжжжжжжжж //Здесь только названия. Полный код ф-й - ниже в аттаче void Message(string m) //вывод сообщ в коммент и принт int NumberOfPositions(string sy="", int op=-1, int mn=-1)//кол-во позиций string GetNameOP(int op)//торг. операция int OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE) string GetNameTF(int TimeFrame=0) //таймфрейм bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0)//флаг сущ. このコードのソースファイルを添付します。どこを間違えたのか、なぜEAにマジコンが表示されないのか、教えてください。 ファイル: exp.sell.rar 4 kb 削除済み 2009.08.22 14:47 #906 if( StopLoss>0) SL=Bid+Point* StopLoss; if( TakeProfit_Sell>0) TP=Bid-Point* TakeProfit_Sell; //Открываем позицию селл //ti=OpenPosition(NULL, OP_SELL, Lots_1,Magic); Ваш маджик шел в качестве стоп-лосса ti= OpenPosition(NULL, OP_SELL, Lots_1, SL, TP, Magic); Alexander 2009.08.23 05:14 #907 あなたのバージョンでは、売り注文しか チェックされないことをご存知ですか? 発見しました!ポジションオープン機能には6つのパラメータが必要なのに、4つのパラメータしか送っていないのです。 Рита 2009.08.23 05:52 #908 はい、皆さん(tmp.0&Roger)ありがとうございました!修正し、すべてが正常に動作するようになりました。 私の不注意が原因です。 OpenPosition()関数では全くありません。 SL=0; TP=0; if( StopLoss>0) SL=Bid+Point* StopLoss; if( TakeProfit>0) TP=Bid-Point* TakeProfit; ti= OpenPosition(NULL, OP_SELL, Lots,0,0, Magic); if (OrderSelect( ti, SELECT_BY_TICKET)) ModifyOrder(-1, SL, TP, clModifySell); 削除済み 2009.08.25 07:01 #909 プレイヤーよ、ヒントをくれ! OrderCloseBuy - OrderCloseSell を使用する場合、組み込みの MKueL 言語とコンパイラは、2 つの関数パラメータ(注文チケット- buy と sell)を要求します。オープンオーダーのチケットは1枚ですが、2枚目はどのように設定すればいいのでしょうか?あるいは、私が何か理解していなかったのかもしれません。言語の自習書には、この関数について何も書かれておらず、例もありません。 ありがとうございました。 削除済み 2009.08.25 08:02 #910 そして、ここでもイゴールさんに質問です。 通常のOrderClose-OrderSendを使わずに、買いポジションと 売りポジションを反転 させる別のカスタム(または他の)関数を作成しましたか? 1...848586878889909192939495969798...128 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
CrossPointOfSections()関数です。
この関数は、2つのセグメントの交点の座標を計算します。 各セグメントは、その点座標の組で定義されます。3つの配列がパラメータとして関数に渡されます。
スクリプトはテスト用です。
こんにちは。最後のポジションをテイクまたはストップロスでクローズするフラグを返す関数についての質問です。
'KimIVからの便利な機能'。
関数 isCloseLastPosByTake().
テイク上の最後のポジションをクローズするフラグを返します。フラグが立っている - True - TakeProfitが発動されました。フラグを下げた - False - その他の理由でポジションがクローズされた
//---------------------------------------------------------------
昨日、一般フォーラムでこんな質問をしました。しかし、今のところ答えはない。
私のExpert Advisorには3段階のマーチンゲールがあります。各ステップ(ポジション)には、それぞれのマジック(1,2,3)があります。
ポジションはシグナルやストップで決済されます。
このような閉め方も実施されています。
私のExpert Advisorは、マーティゲールステップの最後の(最大の)ポジションがTake Profitでクローズされない限り、うまく機能する ことが判明しました。
そして、次の最初の位置(マジック1)が開かれると、isCloseLastPosByTake( )関数のフラグが1(1)のままなので、すぐに閉じられます !
そして、無限大に。開いたり閉じたりする。
さらに!ターミナルがこのフラグを記憶しており、EAを新たに削除/インストールしても(Magiksを変更するまで)役に立ちません。
すべてのポジションがクローズされた後、isCloseLastPosByTake() 関数をリセットする方法が必要です。
もう、脳みそが裏返るほどひねくれてるんですよ。うまくいかない!?
イゴール!、または誰か(できる人)、どうすればいいのか、全くできないのか、教えてください。
私の疑問に対する答えが見つかったようです。ご興味のある方は、こちらへどうぞ。
目利きのための質問」。
ModifyOrder()関数の使用例です。
これまで何度も聞かれたことのある、まさにその例を挙げることにしたのです。成行注文の実行という意味でのポジションのオープンです。 マーケットウォッチそれは、市場価格でポジションを建てる注文と、それに付随する保留注文を同時に出すことができない場合である。まず、ポジションを建て、そのポジションに注文を付け、StopLossとTakeProfitの価格レベルを設定します。
1.現在のシンボルを0.1ロット購入し、ストップを30ポイントに設定する。
2.現在のシンボルを0.15ロット売り、SL=45, TP=99とする。
例題を含むワーキングスクリプトが予告編に含まれています。
EAにマジックを入れない限りは!?
全ポジションが正常にモディファイされます。ただし-。
OpenPosition()関数が魔法使いに気づかず、すべてのバーでポジションを1つずつオープンし続けるのはなぜでしょうか? すでに不要なものはすべて削除しています(コードの私のミスだと思いました)。
そして、コメントにはポジションの数を入れてください。 無駄なことです。明らかなポジションがある場合 - コメントはゼロを印刷します。
なぜ機能がマジシャンに見えないのかがわからない!以下はそのコードです。
このコードのソースファイルを添付します。どこを間違えたのか、なぜEAにマジコンが表示されないのか、教えてください。
はい、皆さん(tmp.0&Roger)ありがとうございました!修正し、すべてが正常に動作するようになりました。
私の不注意が原因です。 OpenPosition()関数では全くありません。
プレイヤーよ、ヒントをくれ!
OrderCloseBuy - OrderCloseSell を使用する場合、組み込みの MKueL 言語とコンパイラは、2 つの関数パラメータ(注文チケット- buy と sell)を要求します。オープンオーダーのチケットは1枚ですが、2枚目はどのように設定すればいいのでしょうか?あるいは、私が何か理解していなかったのかもしれません。言語の自習書には、この関数について何も書かれておらず、例もありません。
ありがとうございました。
そして、ここでもイゴールさんに質問です。
通常のOrderClose-OrderSendを使わずに、買いポジションと 売りポジションを反転 させる別のカスタム(または他の)関数を作成しましたか?