bool Trade (int signal)
{
FindOrders();
if(signal == SIGNAL_BUY) // Если сигнал на покупку и открытых ордеров нет..if(!OpenBuy()) // открываем лимитный ордер на покупкуreturn(false);
if(signal == SIGNAL_SELL) // Если сигнал на продажу и открытых ордеров нет..if(!OpenSell())
return(false); // открываем лимитный ордер на продажуif(OrderStopLoss() == 0 && OrderTakeProfit() == 0)
OrdersModifying(); // Модифицируем ордер, добавим SL и TPif(UseBU == true)
MovingStopLossToBU(); // Перевод в б.у. по достижению некоторого значения TPreturn(true);
}
bool Trade (int signal)
{
int total = OrdersTotal() - 1;
FindOrders();
if(signal == SIGNAL_BUY) // Если сигнал на покупку и открытых ордеров нет..if(!OpenBuy()) // открываем лимитный ордер на покупкуreturn(false);
if(signal == SIGNAL_SELL) // Если сигнал на продажу и открытых ордеров нет..if(!OpenSell())
return(false); // открываем лимитный ордер на продажуfor(int i=total; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
OrdersModifying(); // Модифицируем ордер, добавим SL и TP
}
}
// if(UseBU == true)// MovingStopLossToBU(); // Перевод в б.у. по достижению некоторого значения TPreturn(true);
}
そして、改造機能はこうです。
void OrdersModifying()
{
int total = OrdersTotal() - 1;
double sl = 0, tp = 0;
for(int i=total; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true) // Если ордер есть и он выбран..
{
if(g_type == OP_BUY)
{
if(i_sl != 0) // Если входной параметр стоп-лосса не равен 0, то..
sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits); // Получаем значение стоп-лосса для выбранного ордераif(i_tp != 0) // Если входной параметр тейкпрофита не равен 0, то..
tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits); // Получаем значение тейкпрофита для выбранного ордера
}
if(g_type == OP_SELL)
{
if(i_sl != 0) // Если входной параметр стоп-лосса не равен 0, то..
sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits); // Получаем значение стоп-лосса для выбранного ордераif(i_tp != 0) // Если входной параметр тейкпрофита не равен 0, то..
tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits); // Получаем значение тейкпрофита для выбранного ордера
}
if(sl != 0 || tp != 0) // Если полученные значения sl и tp не равныы 0, то..
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime); // Модифицируем ордер
}
}
}
}
Vitaly そこがポイントです。ご覧ください。
最初にsl =0; tp =0; そして、ユーザーが入力したi_slと i_tpを もとに、すでに順番が決まっているslと tpの 正規化された値を求めます。そして、slとtpが 0に等しくないか、つまり、関数の最初に宣言した後に変更されたかをチェックし、次に、slと tpが0に等しいかどうかをチェックします。注文を変更します。
また、slとtpが 0に等しい場合は、これらのパラメータが計算 されていないことを意味します......。ということです。これらの変数の値を得れば、すぐにゼロ以外の値になり、順序を修正することができるのだが......。意味があるのでしょうか?
申し訳ありませんが、私は何かを見ていない、メガネと色はありませんが、なぜこの関数にパラメータを渡すと、同様に参照によって?もしi_sl,g_type...がグローバル変数 であれば、パラメータなしで動作し、変更する必要がある場合(変更後の変数)は、変更後の同じ関数内で行ってください。
すみません、私は何か見ていない、私はメガネや任意の色を身に着けていない、しかし、なぜ我々は、この関数にパラメータを渡す必要があり、参照によって、あまりにも?もしi_sl,g_type...がグローバル変数であれば、パラメータなしで動作し、変更する必要がある場合(変更後の変数)は、変更後の同じ関数内で行ってください。
注文はOpenBuy() 関数とOpenSell() 関数によって送られますが、OrdersModifying()関数は注文を修正 します。
つまり、例えば、Trade 関数(int signal) やOpenBuy()、OpenSell()の中に修正関数がある場合、OrdersModifying() 関数で得られたslや tpは いずれにしてもそこに渡されるべき ものである。これらの値は、その関数に欠けています。
注文は関数OpenBuy() とOpenSell()によって送信されますが、関数OrdersModifying()によって変更 されます。
つまり、例えば、修正関数がTrade 関数(int signal) やOpenBuy()、OpenSell() に置かれている場合、OrdersModifying() 関数で得られたslと tpの 値は、いずれにしてもそこに渡されるべき ものである。これらの値は、その関数に欠けています。
あなたの場合、 関数OpenBuy() とOpenSell() はstd なしで注文を出し、注文が出されたら関数OrdersModifying() を使って修正 するのです。OrdersModifying() 関数を別の場所に配置し、そこにパラメータを 渡す必要は ないと思います。この関数の中で変数 slとtpを宣言するだけ です。int sl = 0, tp = 0;
すみません、intではなくdoubleです。
OpenBuy()やOpenSell() 関数がslなどを使わずに注文を出し、注文が出たらOrdersModifying() 関数を使って変更 します。OrdersModifying() 関数を別の場所に配置し、そこにパラメータを 渡す必要は ないと思います。この関数の中で変数 slとtpを宣言するだけ です。int sl = 0, tp = 0;
現在、私はそのようなトレーディング機能を持っています。
モディファイが行われない。
現在、私はそのようなトレーディング機能を持っています。
モディファイが行われない。
取引()機能で選択されていない注文がある。
スクリプトに何を求めているのか理解できない。
アーカイブチャートで起動すると、そのプログラムが必要です。
値動きのある部分には、動きの強さや時間など、指定されたパラメーターが視覚的に表示されます。
例えば-30分で400点の補正を行った場合。 そうして1年を通して、すべての補正をこの範囲内で行っています。
手動で目視観察することは不可能です。ディストーション(歪み)。すぐに確認できるような色分けが欲しいです。
___
調べたところ、さまざまな「Histoty」プログラムがあるようです。 しかし、それらはアカウントの履歴を可視化するだけです。
しかし、私が指定したフィルターによる価格のセグメントは見つかっていません。
取引()機能で注文が選択されていない。
そんなものがあるんですね。これが修正方法です。
そして、改造機能はこうです。
Strange でも、また出力にストップ&テイクがないんです。
アーカイブチャートで起動すると、そのプログラムが必要になる
値動きのある部分には、動きの強さや時間など、指定されたパラメーターが視覚的に表示されます。
例えば-30分で400点の補正を行った場合。 そうして1年を通して、すべての補正をこの範囲内で行っています。
手動で目視観察することは不可能です。ディストーション(歪み)。すぐに確認できるような色分けが欲しいです。
___
調べたところ、さまざまな「Histoty」プログラムがあるようです。 しかし、それらはアカウントの履歴を可視化するだけです。
しかし、与えられたフィルターに従った価格のセグメントを見つけることができませんでした。
History、History_Draw - これらはテストにおけるExpert Advisorのように機能します。
与えられたパラメータによる履歴の補正を見るために、このようなものが必要です。
Symbol() MT4で問題が発生しました。
2つの機能で説明します。
を実行すると、空文字列が出力されます。
しかし、2番目の関数は、文字列ID "EURUSD "を出力します(まあ、チャートに依存しますが、関数のロジックによると、それは空の文字列になるはずですが、出力されます)。
何が問題なのか理解するのを助けてください。ありがとうございました。
取引()機能で注文が選択されていない。
ちなみに。Trade() 関数で注文を選択する意味は何ですか?注文が選択され、そこで修正される関数 OrdersModifying() を呼び出して います。つまり、最初のバリエーションが正しかったのだ!