![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это просто:
Поместите что-то вроде этого в начало процедуры start() вашего советника, и это предотвратит его работу, если убыток (или прибыль), уже полученный в этот день, превысит некоторую сумму:
for (int i =OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != someMagicNumber) continue;
if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
totalProfit += OrderProfit()+OrderCommission()+OrderSwap();
}
if (totalProfit < someProfitLossLimit) return(0);
[/PHP]Уважаемый господин MLADEN....
Большое спасибо за вышеуказанные коды.... IOU 2 кредита.....![](https://c.mql5.com/forextsd/smiles/party.png)
[PHP]
double totalProfit=0;
for (int i =OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol() == Symbol()) continue;
if (OrderMagicNumber() == someMagicNumber) continue;
if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
totalProfit += OrderProfit()+OrderCommission()+OrderSwap();
}
if (totalProfit < someProfitLossLimit) return(0);
Просто для проверки..... будет ли этот код предотвращать любые другие ордера от определенной валютной пары и MagicNumber.... если сегодняшний ACCUMULATED LOSS превышает someProfitLossLimit....
Спасибо за очень-очень быстрый ответ....
наилучшие пожелания
AZRUL...
Уважаемый господин MLADEN....
СПАСИБО БОЛЬШОЕ за вышеуказанные коды.... IOU 2 кредита.....![](https://c.mql5.com/forextsd/smiles/party.png)
double totalProfit=0;
for (int i =OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol() == Symbol()) continue;
if (OrderMagicNumber() == someMagicNumber) continue;
if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
totalProfit += OrderProfit()+OrderCommission()+OrderSwap();
}
if (totalProfit < someProfitLossLimit) return(0);
[/PHP]
Just to check..... will this code prevent any more orders from a specific currency pair and MagicNumber.... if today's ACCUMULATED LOSS exceed someProfitLossLimit....
Thanks for the very-very fast reply....
best regrads
AZRUL...Да
Это предотвратит дальнейшую обработку кода, если накопленная прибыль закрытых ордеров меньше некоторой суммы. Вы можете заменить последнюю строку на эту :
[PHP]if (totalProfit < 0 && totalProfit < someProfitLossLimit) return(0);Чтобы убедиться, что это делается только в тех случаях, когда накопленная "прибыль" отрицательна (когда были убытки)
Да
Это предотвратит дальнейшую обработку кода, если накопленная прибыль закрытых ордеров меньше некоторой суммы. Вы можете заменить последнюю строку на следующую:
Dear Sir MLADEN...
So Sorry Sir... Я думаю, что я не достаточно ясно объяснил для вас......
Мое намерение состоит в том, что код для отслеживания накопленного убытка только для конкретной валютной пары и MagicNumber..... Не включая прибыль, которую он приносит... только убытки считаются...
ИЗВИНИТЕ ЗА ПУТАНИЦУ...
С наилучшими пожеланиями...
AZRUL...
Уважаемый сэр MLADEN...
Простите, сэр... Я думаю, что я не достаточно ясно объяснил для вас.....
Мое намерение состоит в том, что код для отслеживания накопленного убытка только для конкретной валютной пары и MagicNumber..... Не включая прибыль, которую он приносит... только убытки считаются...
ИЗВИНИТЕ ЗА ПУТАНИЦУ...
С наилучшими пожеланиями...
АЗРУЛ...AZRUL
Прибыль может быть отрицательной (==убыток)
В закрытом списке otrders есть файл Order() profit, который сохраняет "прибыль": положительную для выигрышных ордеров и отрицательную для проигрышных сделок. Этот код делает именно то, что вам нужно
Уважаемый господин МЛАДЕН,
Теория заключается в следующем.... если сегодня случится так, что рынок будет SIDEWAY, я в конечном итоге потеряю часть прибыли (если таковая имеется), которая была сделана и X$ РИСК на мой капитал..... Это не защита от очень плохого торгового дня......
Причина в том, что я готов рисковать на X$ в день от сегодняшней торговли.....
Вышеуказанные коды съедят всю прибыль (если таковая имеется) за день, плюс это также съест мой РИСК (капитал)...
СПАСИБО
С наилучшими пожеланиями...
AZRUL...
AZRUL Прибыль может быть отрицательной (==убыток)
Уважаемый господин МЛАДЕН...
Спасибо, что просветили меня по поводу вышеупомянутого предложения...
Я постараюсь найти любой результат.....
с наилучшими пожеланиями
AZRUL...
Уважаемый господин МЛАДЕН,
Подойдут ли следующие коды...
Следить за накопленным убытком только для конкретной валютной пары и MagicNumber..... Не включая прибыль, которую он приносит... Считается только убыток...
extern double LossAmount = -500.00
...............
int start()
if(LossRisk()<=LossAmount)
return(0);
...............
void LossRisk()
double totalLoss=0;
{
for (int i =OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol() == Symbol()) continue;
if (OrderMagicNumber() == someMagicNumber) continue;
if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
totalLoss -= OrderProfit()+OrderCommission()+OrderSwap();
}
return(totalLoss);
}
Ваши знания будут высоко оценены...![](https://c.mql5.com/forextsd/smiles/angel_smile.png)
искренне ваш
AZRUL....
Уважаемый господин МЛАДЕН,
Помогут ли следующие коды...
Следить за накопленным убытком только для конкретной валютной пары и MagicNumber..... Не включая прибыль, которую он получает... Считается только убыток...
extern double LossAmount = -500.00
...............
int start()
if(LossRisk()<=LossAmount)
return(0);
...............
void LossRisk()
double totalLoss=0;
{
for (int i =OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol() == Symbol()) continue;
if (OrderMagicNumber() == someMagicNumber) continue;
if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
totalLoss -= OrderProfit()+OrderCommission()+OrderSwap();
}
return(totalLoss);
}
[/PHP]
Your Knowledge is highly appreciated...![](https://c.mql5.com/forextsd/smiles/angel_smile.png)
yours truly
AZRUL....Нет, не будет
Если вы хотите сложить только убытки, вам нужно добавить
&& (OrderProfit()+OrderCommission()+OrderSwap()<0)
Таким образом, функция будет выглядеть следующим образом :
[PHP]void LossRisk()
double totalLoss=0;
{
for (int i =OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol() == Symbol()) continue;
if (OrderMagicNumber() == someMagicNumber) continue;
if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)
if (OrderType()==OP_BUY || OrderType()==OP_SELL && (OrderProfit()+OrderCommission()+OrderSwap())<0)
totalLoss += OrderProfit()+OrderCommission()+OrderSwap();
}
return(totalLoss);
}
Уважаемый господин MLADEN....
В настоящее время я использую эти коды в своем советнике, который работает на таймфрейме M15...
Он открывает новый ордер после таймфрейма M15...
bool AddP()
{int _num=0; int _ot=0;
for (int j=0;j<OrdersTotal();j++)
{if(OrderSelect(j,SELECT_BY_POS)==true && OrderSymbol()==Symbol() && OrderType()<3 && ((OrderMagicNumber()==Magic) || Magic==0))
{
_num++;if(OrderOpenTime()>_ot) _ot=OrderOpenTime();
}
}
if(_num==0) return(true);
if(_num>0 && ((Time[0]-_ot))>0)
return(true);
else return(false);
}
Не могли бы вы изменить этот код, чтобы он открывал ордер на каждые 5 минут после предыдущего ордера....
хотя я нахожусь на таймфрейме M15....
НАДЕЮСЬ, ВЫ НЕ ОБИДИТЕСЬ, ЕСЛИ Я ОТПРАВЛЮ ВАМ СТОЛЬКО ВОПРОСОВ....
с наилучшими пожеланиями
AZRUL...
Нет, не будет
Если вы хотите суммировать только проигрыши, вы должны добавить
&& (OrderProfit()+OrderCommission()+OrderSwap()<0)
Таким образом, функция будет выглядеть следующим образом:
double totalLoss=0;
{
for (int i =OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol() == Symbol()) continue;
if (OrderMagicNumber() == someMagicNumber) continue;
if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)
if (OrderType()==OP_BUY || OrderType()==OP_SELL && (OrderProfit()+OrderCommission()+OrderSwap())<0)
totalLoss += OrderProfit()+OrderCommission()+OrderSwap();
}
return(totalLoss);
}
Уважаемый сэр МЛАДЕН,
Вы действительно знаете, как сделать так, чтобы все было сделано здесь....
Я ОЧЕНЬ-ОЧЕНЬ РАД получить от вас ответ, сэр....
Напишите мне, если есть что-нибудь, что я мог бы сделать взамен... кроме кодирования....
Спасибо
С наилучшими пожеланиями
AZRUL...