Alert("Исполнение программы");
double p[100];
int i =0;
int n = OrdersTotal ();
int t =0;
for (i=0; i<=n+1; i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
p[i+1] = OrderProfit(); // р - це прибуток ордера
}
}
for (i=0; i<=n+1; i++)
{
if (p[i+1]>0) // якщо ордер прибутковий, то його
{
Alert("Є прибуток ордер ",i+1);
OrderSelect(i+1,SELECT_BY_POS,MODE_TRADES);
Alert("Маємо помилку ",GetLastError());
Alert("Вибрали ордер ",i+1);
double ld_Price;
if (OrderType() == 0) ld_Price = NormalizeDouble (Bid, Digits);
else ld_Price = NormalizeDouble (Ask, Digits);
OrderClose (OrderTicket(), OrderLots(), ld_Price, 2); // треба зачинити Alert("Маємо помилку ",GetLastError());
Alert("Закрили ордер ",i+1);
if ( OrderType()==OP_BUY) // в залежності від того, якого типу ордер ми зачинили
{
Alert("Ордер типу бай");
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid-25*Point,Ask+25*Point); // змінюється порядок відкривання наступних ордерівAlert("Відкрили ордер типу селл");
Sleep(10000);
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-25*Point,Ask+25*Point);
Alert("Відкрили ордер типу бай");
}else
{
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-25*Point,Ask+25*Point);
Alert("Відкрили ордер типу бай");
Sleep(10000);
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid-25*Point,Ask+25*Point);
Alert("Відкрили ордер типу селл");
}
}
}
Alert("Последняя ошыбка ",GetLastError());
//----return(0);
}
//+----------------------------------------------------------------------------+bool ExistOrdersByPrice(string sy, int op, int mn, double pp) {
int i, k=OrdersTotal()-1;
for (i=k; i>=0; i--) {
if (OrderSelect(i,SELECT_BY_POS)) {
if (OrderMagicNumber()!=mn) continue;
if (OrderSymbol()!=sy) continue;
if (OrderType()!=op) continue;
if (MathAbs(OrderOpenPrice()-pp)<0.5*Point) return(true);
}
elsePrint("FUNC ExistOrdersByPrice() : ошибка выбора ордера "+GetLastError());
}
return(false);
}
//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+if (!ExistOrdersByPrice(Symbol(), OP_BUYSTOP, Magic, 1.35000)) {
// тут код, если нет такого ордера
}
else {
// тут код, если есть такой ордер
}
//+----------------------------------------------------------------------------+
ご回答ありがとうございました。そんな疑問がまったく湧いてこないことに、私自身驚いている。とはいえ、もしかしたら私が見たものと質問の原因を取り違えていたのかもしれませんが。
今は他の人のコードを見て、あるアルゴリズムを実装するためにどんな方法(私のとは違う、おそらくより効率的な方法)が使われているのかを見ています。今、私は悪名高いアイラン1.6 Expert Advisor(添付)を見ています。いろいろな部品から組み立て、再構築したことがよくわかります。しかし、337行目にはユーザー定義のトレイリングストップ関数が含まれている(ただし、冒頭でその使用のフラグが強制的にクリアされている)。この関数は52行目で呼び出されます。
私の疑問は、上記のトレーリングストップが、オープン オーダー(複数あり得ます)を、その最初のTakeProfitを維持したままストップロスで修正し、それらのオーダーにオープン価格として同じ値(173と178行目で計算されるAveragePrice)を設定することから生じます(OrderModify関数の2番目のパラメータ)。
それとも、未決済注文を修正する際に、そのパラメータ(オープン価格)は単にサーバーに無視され、サーバーは任意の価格を設定できるのでしょうか?
マーケットポジションを変更する場合、価格を設定し、開始 価格と同じにする必要があります: OrderOpenPrise()
PS もし私があなただったら、このコードに「効率的なアルゴリズム」を探すことはしないでしょう。この人はそこで何をしているのかよくわからないままコードを書いているように見えますから...。
その「愚かさ」を見つけてください、パスカルに拷問された男に慈悲を与えてください。
成行ポジションを変更する場合、価格はポジションの開始価格と同じに設定されなければなりません:OrderOpenPrise()
そうすると、この機能は機能しないとお考えですか?テストしたわけではありませんが、動作しているコードの一部であるように思えます(このアイランは明らかにせいぜいデバッグされたものから作り直されたものです)。それとも、やはり粗悪なコードなのでしょうか?
PS もし私があなただったら、そのコードに「効率的なアルゴリズム」を探すことはしないでしょう。その人はそこで何をしているのかよくわからないままコードを書いたように見えますから...。
正しい場所に - それはどの場所ですか?
例えば注文がすでに1200ポイントにある...そして価格例えば沈んでいたと星はすでにこの場所で注文が置かれなければならないように整列している...そして注文はすでにそこにあり、必要なものより下にバランスを下げないように、例えば、それぞれ二つの注文を入れてはいけません。
では、この機能は使えないのでしょうか?テストしたわけではありませんが、動作しているコードの一部のように思えます(このアイランは明らかにせいぜいデバッグされたものから作り直されたものです)。それとも、やはり粗悪なコードなのでしょうか?
まあ...コードはマジでないんですけどね。少なくとも。
Lommultiplicator = グリッドの次のオーダーのロットサイズの比率です。
Magic=マジックナンバー
最初のコードと同様に取引を終了します。つまり、1番目の注文がクローズしたときに、グリッド内のすべての注文がクローズされることになります。
例えば1200ポイントで既に注文が入っていて、例えば価格が下がって、この場所に注文を入れなければならないように星が並んでいて、注文は既にそこにあって、1つで2つの注文を入れないように必要な残高より下げないように、言ってみれば
こんな感じです。
現在のシンボルにMagicで価格1.35000のBuyStop注文があるかどうかを確認するために、この関数を呼び出します。
ドキュメントの場合は、MetEditorで単語をハイライトしてF1キーを押してください。あるいは、オンラインなどで。
https://docs.mql4.com/ru/customind/SetLevelStyle
もちろんありがとうございます。でも、質問を読むのが面倒なら、答える意味はないでしょう?私の持っている2つの関数で、インジケータのレベルの値、太さ、色、スタイルを変更することができます。説明文にアクセスできない。もう一度聞きますが、誰か答えを知っていますか?見たことあるようなないような。
必要なものを示すために写真を添付しました。![](https://c.mql5.com/mql4/forum/2013/10/untitled-1_2.jpg)