artmedia70, Проходим по всем ордерам и суммируем их профиты. Если результирующий профит больше нуля или больше некой, заранее заданной величины, то закрываем все позы.
Попробуйте код закрытия всех ордеров сделать самостоятельно.
Подсказка: Для цикла, в котором все ордера будут закрываться, нужно направление перебора ордеров делать обратным - точно так, как я это сделал в вышеприведённом коде. А именно - от последнего ордера к первому. Если поменять направление перебора, то в цикле будут закрыты не все ордера. Например, ордер, который стоит в списке первым, будет закрыт и в результате на его место встанет другой. А поскольку счётчик цикла увеличился на единицу, то другой ордер из этой строчки списа будет пропущен.
Проходим по все ордерам. Если профит ордера меньше чем тот, что в double, то запоминанем в неё этот профит. Таким образом после цикла в этой переменой лежит значение самого маленького профита (читай самый большой убыток из имеющихся). Если параллельно запоминать в массиывы и тикет текущего убыточного ордера и те тикеты ордеров, у котороых профит больше нуля, и суммарный профит ордеров, у которых он положительный, то можно всё решение (какими ордерами и сколько перекрывать) принять в одной функции.
А вот ещё вопросик... Други! Подскажите, плиз, каким образом возможно не покупать на самом верху движения вверх и не продавать на самом донышке. А то получается, что сигнал на покупку ещё присутствует, но уже близко к развороту, а он (советник) хрясь... и покупает. Позиция оказывается убыточной. Как бы фильтровать енто дело, а???
Перепробовал уже уйму всяческую различных индюков - всё не то...
Мож кто сталкивался ужо с данной проблемой, даже, скажем точнее - проблемищей? Как её возможно решить, хоть пол-словом обмолвитесь, пожалуйста... Всем профитов нескончаемых!
Как вариант - чередовать сделки. Например, торгуем по признаку - направление скользящей + местонахождение цены (скажу сразу система убыточна, но хорошо иллюстрирует подход). Например. Пишем в коде: SignalBuy=false; SignalSell=false; - обнулили сигналы. Далее проводим проверку: сигнал к покупке - скользящая вверх и цена выше скользяшей. Следовательно SignalBuy=true; если скользящая вниз и цена ниже скользящей, то SignalSell=true; Дале пишем условие: если ордеров в рынке нет, и при этом сигнал к покупке имеет положение "истина" и при этом последний ордер в истории - Buy, то SignalBuy=false; - то есть, сбрасывем сигнал к покупке, так как только что лонговый ордер был закрыт. То же самое с шортовыми позициями. Чего мы этим добьёмся? При перевороте скользящей и пробитии ценой будет открыт соответствующий ордер. Далее советник будет ждать противоположного сигнала. Это значит, что если лонговая поза закрылась почти на самом верху тренда, то в этой точке лонг уже не откроется, так как советник встанет в состояние ожидания сигнала открыть шорт.
artmedia70>>: Да, конечно, спасибо, принцип понятен, но в моей ТС он будет ещё более убыточен. У меня торговля идёт сразу почти по всем ТФ (от М5 до D1) и на кждом ТФ несколько своих ТС одновременно пашут... Так вот на М5 у меня собирает по ходу движения цены всё, что можно... Вот здесь и загвоздочка... Сигнал на Бай длится до самого разворота. Также и на Селл. По движению он собирает конечно достаточно, но эти убыточные позиции, открытые на пиках-донышках либо съедают всю прибыль от движения, либо... (если их не закрывать, а пересиживать) ... жрут всю маржу. Вот как бы их подрезать чем-нить... эти пики-дондышки, чтоб сигнала уже не было...
しかし、エキスパートアドバイザーは、ゼロの状態(if(Sostojanie=0){})では、A、B、Cの操作しかできないことを、開始時点ですでに知っています。そして、これらの操作の1つ以上の結果がどうなるかによって、EAはどの状態(Sostojanie=1;/or 2, or 3など)に行くか、逆に現在の状態にとどまるかを選択するのである。
artmedia70, Проходим по всем ордерам и суммируем их профиты. Если результирующий профит больше нуля или больше некой, заранее заданной величины, то закрываем все позы.
Попробуйте код закрытия всех ордеров сделать самостоятельно.
Подсказка: Для цикла, в котором все ордера будут закрываться, нужно направление перебора ордеров делать обратным - точно так, как я это сделал в вышеприведённом коде. А именно - от последнего ордера к первому. Если поменять направление перебора, то в цикле будут закрыты не все ордера. Например, ордер, который стоит в списке первым, будет закрыт и в результате на его место встанет другой. А поскольку счётчик цикла увеличился на единицу, то другой ордер из этой строчки списа будет пропущен.
まあ、それでもループなんですけどね。
double 型の変数を宣言する。
すべての注文を通す。 注文の利益がdoubleのものより小さければ、この利益を格納することになります。したがって,ループの後では,この変数には最小の利益(つまり,利用可能なものの中で最大の損失)の値が格納されることになる.現在の負け注文と利益が0以上の注文の チケットと,プラスの注文の利益の合計を配列に保存しておけば,1つの関数ですべて(どの注文を使うか,どれだけカバーするか)を決めることができる。
Ну всё равно цикл.
Объявляем переменную типа double.
Проходим по все ордерам. Если профит ордера меньше чем тот, что в double, то запоминанем в неё этот профит. Таким образом после цикла в этой переменой лежит значение самого маленького профита (читай самый большой убыток из имеющихся). Если параллельно запоминать в массиывы и тикет текущего убыточного ордера и те тикеты ордеров, у котороых профит больше нуля, и суммарный профит ордеров, у которых он положительный, то можно всё решение (какими ордерами и сколько перекрывать) принять в одной функции.
ここでまた疑問が...。
フレンズ!上昇の頂点で買わず、底で売らないというのはどういうことなのでしょうか?買いのシグナルはまだ存在するが、反転に近い状態であり、それ(Expert Advisor)はドカン...。と購入する。ポジションは赤字であることが判明。これをどうやってろ過するのか?
いろいろな嗜好品を試しましたが、どれも同じではありません...。
もしかしたら、この問題、というか問題にすでに直面した人がいるかもしれない。どうすれば解決できるのか、半分でもいいので教えてください.
すべての人に無限の利益を
А вот ещё вопросик...
Други! Подскажите, плиз, каким образом возможно не покупать на самом верху движения вверх и не продавать на самом донышке. А то получается, что сигнал на покупку ещё присутствует, но уже близко к развороту, а он (советник) хрясь... и покупает. Позиция оказывается убыточной. Как бы фильтровать енто дело, а???
Перепробовал уже уйму всяческую различных индюков - всё не то...
Мож кто сталкивался ужо с данной проблемой, даже, скажем точнее - проблемищей? Как её возможно решить, хоть пол-словом обмолвитесь, пожалуйста...
Всем профитов нескончаемых!
オプションとして - オルタネートトレード例えば、-動く方向+価格の位置で取引します(すぐに損をするシステムであることをお伝えしますが、そのアプローチをよく表しています)。例えば、こんな感じです。コードに書き込む。 SignalBuy=false、SignalSell=false; - NULLシグナル。次に確認するのは、買いのシグナルが上方に移動し、価格が移動平均線より高いことです。したがって、SignalBuy=true; 下方向に移動していて、価格が移動しているものより低い場合は、SignalSell=true; また、次の条件も書く必要があります:市場に注文がなく、買いポジションが真で履歴の最後の注文が買いであれば、SignalBuy=false; - すなわち、ロングオーダーがちょうど閉じられたので買い信号を落とすということです。ショートポジションも同様です。私たちは何を目指しているのか?スリップが反転し、価格が突破された場合、適切な注文が発注されます。その後、Expert Advisorは反対のシグナルを待ちます。つまり、ロングポジションがトレンドのほぼ頂点で決済された場合、この時点では、EAはショートを開くシグナルを待っている状態になるため、ロングは開きません。
原理ははっきりしていると思います。
Как вариант - чередовать сделки. Например, торгуем по признаку - направление скользящей + местонахождение цены (скажу сразу система убыточна, но хорошо иллюстрирует подход). Например. Пишем в коде: SignalBuy=false; SignalSell=false; - обнулили сигналы. Далее проводим проверку: сигнал к покупке - скользящая вверх и цена выше скользяшей. Следовательно SignalBuy=true; если скользящая вниз и цена ниже скользящей, то SignalSell=true; Дале пишем условие: если ордеров в рынке нет, и при этом сигнал к покупке имеет положение "истина" и при этом последний ордер в истории - Buy, то SignalBuy=false; - то есть, сбрасывем сигнал к покупке, так как только что лонговый ордер был закрыт. То же самое с шортовыми позициями. Чего мы этим добьёмся? При перевороте скользящей и пробитии ценой будет открыт соответствующий ордер. Далее советник будет ждать противоположного сигнала. Это значит, что если лонговая поза закрылась почти на самом верху тренда, то в этой точке лонг уже не откроется, так как советник встанет в состояние ожидания сигнала открыть шорт.
Думаю, принцип понятен.
Да, конечно, спасибо, принцип понятен, но в моей ТС он будет ещё более убыточен. У меня торговля идёт сразу почти по всем ТФ (от М5 до D1) и на кждом ТФ несколько своих ТС одновременно пашут... Так вот на М5 у меня собирает по ходу движения цены всё, что можно... Вот здесь и загвоздочка... Сигнал на Бай длится до самого разворота. Также и на Селл. По движению он собирает конечно достаточно, но эти убыточные позиции, открытые на пиках-донышках либо съедают всю прибыль от движения, либо... (если их не закрывать, а пересиживать) ... жрут всю маржу. Вот как бы их подрезать чем-нить... эти пики-дондышки, чтоб сигнала уже не было...
>> 各TFは独自の取引システムを持っています。
つまり、異なる取引システムを持つアドバイザーが互いの作業を妨げないようにするために、それぞれのTSに他のTSのマジックとは異なるマジックを使用するのです。これにより、EAには自分の注文だけが表示されるようになります。そして、注文を調べ、指定されたマジックナンバーの注文がすでに市場に存在する場合(例えば、買い)、ロングするためのシグナルを無効にするのです。あるいは、ロングの注文が履歴の最後であれば、それも無効にしてショートを待ちます。
そうでなければ、もし私たちのEAが同じ通貨ペアの他の取引システムと干渉することを望むなら、注文ループでマジックナンバーを考慮しないようにします。さらにポジションを簡略化するロジックも同じです。しかし、ここでひとつ微妙な点があります。1つのEAが他のEAと干渉した場合、他のEAが突然自分の注文が消えたことに気づく状況に備える必要があります - EAはこれに適切に反応できなければなりません - すぐに軽率に新しい注文を出すのではなく、例えば同じ取引履歴を分析する必要があるのです。
Uターンまで信号が伸びていると言うことですね。でも、それを回避する方法もあるんです。マーケットに注文はありません。シグナルを確認します。シグナルが出現 - ポジションをオープンし、シグナルフラグを取り除き(変数をゼロにする)、反対のシグナルが出現(ショート)するまで、シグナル(例えばロング)をそれ以上チェックしないようにします。この方法では、ある種の信号の存在に関するフラグは、まったく数秒しか続きません - フラグが設定され、注文が出され、フラグが取り除かれ、反対の信号が発生するのを待ちます。逆が発生し、逆信号のフラグを立て、今まで追えなかった信号を追える良さが出てきたのです。
Expert Advisor を起動します(start()関数ではなく、あくまで作業の開始です)。
- ロングシグナルとショートシグナルの両方を追跡することを許可しています。
信号が長いんです。
- ショートシグナルを追跡できるようにする。
- ロングオーダーを設定し、もしオーダーがすでに設定されているのであれば
- ロングシグナルを追跡できるようにするフラグを削除します。
ショートシグナルが発生した
- もし、注文を逆にするオプションがあれば、ロングオーダーをクローズして、ショートオーダーをセットする
- ロングシグナルを追従できるフラグを立て、ショートシグナルを追従できるフラグを解除する。
一般的に、フラッグはスイッチのことです。また、スイッチの代わりにスイッチを設計することも可能です。この場合、Expert Advisorは、自分の状態を記憶しているサイバネティックオートマトンの原理で動作し始めます。これは例えば、整数型の変数を宣言し、そこに状態番号を代入することで実現できる。例えば、初期化ブロックでは、次のように記述します。
Sostojanie=0;
しかし、エキスパートアドバイザーは、ゼロの状態(if(Sostojanie=0){})では、A、B、Cの操作しかできないことを、開始時点ですでに知っています。そして、これらの操作の1つ以上の結果がどうなるかによって、EAはどの状態(Sostojanie=1;/or 2, or 3など)に行くか、逆に現在の状態にとどまるかを選択するのである。
それぞれの状態において、Expert Advisorは何ができて何ができないか、どのような条件で別の状態に移行しなければならないかを知っています。
ブローカーが既存の注文をクローズし、再オープンすることができ、そのパラメータの一部が変更されることは前述しました(コメントなど)。
- どのパラメータが100%継承されるのか知りたいのですが?(開場時間、抽選、...?)
Ранее упоминалось что брокер может закрыть+переоткрыть существующий ордер и при этом некоторые его параметры изменятся (комментарии и т.д.).
- Хотелось бы узнать какие параметры на 100% будут унаследованы? (время открытия/закрытия, лоты, ...?)