//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает флаг убыточности последней позиции. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
int i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderProfit()<0) return(True);
}
return(False);
}
//+------------------------------------------------------------------+double getMartinLot(double lot, double x){ //ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛАstaticdouble balance_before, balance_after; //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОКstaticdouble save_Lot;
balance_after = AccountBalance(); //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСАif(balance_after >= balance_before){ //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
save_Lot = lot; //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ ДО БАЗОВОГО
}else{
save_Lot *= x; //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ НА Х РАЗ
}
balance_before = balance_after; //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫreturn(save_Lot);
}
//+------------------------------------------------------------------+
itum:
この問題を解決するには?ガー
コンディションハンドリングは、バーの最初に1回だけ行う。
また、注文が入ると設定され、条件が大きく変化するとリセットされるフラグを実行します。
Уважаемые програмисты.
前の取引が負けていた場合、EAが前のロットを2倍にしてポジションを開くようにするには、コードに何を挿入すればよいか(可能であれば、どこに挿入すればよいか)教えてください。
ありがとうございました。
ちょっとお聞きしたいのですが、ポジションを開設する場合はどうしたらいいのでしょうか?
Roger:
Ищите советники с кодовым названием Мартингейл.
探していたのですが、私には使えません。
前のトレードが負けていた場合、2倍になるはずのものを見つけたのですが、動作する気がしません。
これはおそらく、ここでコードを提供されても、やはり自分でEAに挿入することはできない、ということですよね?
いいえ、EAが動作せず、私が必要とするコードの一部を含む動作するEAが見つからないということです。
https://www.mql5.com/ru/forum/104481 確認してください。
いいえ、EAが動作せず、必要なコードの一部を含む動作するEAが見つからないということです。
グローバル変数に、ロットの初期値を設定します。
そこで、この値を変数に代入し、その変数がロット値をポジションオープン関数に渡します。
double Lots_New = Lot;
ポジションをクローズした後、損益を確認してみましょう。そして、この機能自体も、イゴール・キムのおかげで...。
cyclik33:
プログラマーの皆様へ。前の取引が負けていた場合、EAが前のロットを2倍にしてポジションを開くようにするには、コードに何を挿入すればよいか(可能ならどこに挿入すればよいか)教えてください。
あらかじめご了承ください。
ボリス
Borisさん、全然難しくありませんよ。マーチンゲール原理を実装した簡単な関数がこちらです。
パラメータとして、初期体積(double lot)、ステップ(double x)を渡す。
Volume パラメータの代わりに OrderSend に直接メソッドを挿入します。
関数呼び出しの 例です。