Настрой историю в терминале, и первый параметр в индикаторе и не будет беды.
Мне не важно что показывает конкретно этот индикатор :facepalm: У меня есть вопрос с которым я обратился сюда
Настрой историю в терминале, и первый параметр в индикаторе и не будет беды.
Мне не важно что показывает конкретно этот индикатор :facepalm: У меня есть вопрос с которым я обратился сюда
Мне не важно что показывает конкретно этот индикатор :facepalm: У меня есть вопрос с которым я обратился сюда
Суть в том, что индикатор(и методика вычислений в нем) зависит от того, как показывается история терминала.
Если в терминале выбрать "Сегодня" или "Последняя неделя", то такая методика будет показывать именно "Сегодня", а вовсе не последний месяц.
Поэтому и предлагается в первый день месяца внести баланс в глоабльные переменные терминала через GlobalVariableSet() и потом проверять и сравнивать текущий баланс с этим значением, полученным через GlobalVariableGet().
А если так (ограничение по пунктам в месяц):
Добавляем некую переменную Y, присваиваем ей 0. Сделка закрылась, записываем значение Y = X или -X (количество пунктов) в переменную. Закрывается вторая сделка, прибавляем значение к переменной Y=Y+X и так далее, пока Y не станет равна или больше нужного значения, при котором срабатывает запрет на открытие нового ордера до наступления первого числа месяца и тогда Y снова присваиваем 0 и все начинается снова. ???
(Знаю, что при перезапуске советника или терминала переменная обнулится)
Нну... Кто ж такое советовать будет именно из-за того, что закрытие терминала или перезапуск советника приведет к сбросу значения.А если так (ограничение по пунктам в месяц):
Добавляем некую переменную Y, присваиваем ей 0. Сделка закрылась, записываем значение Y = X или -X (количество пунктов) в переменную. Закрывается вторая сделка, прибавляем значение к переменной Y=Y+X и так далее, пока Y не станет равна или больше нужного значения, при котором срабатывает запрет на открытие нового ордера до наступления первого числа месяца и тогда Y снова присваиваем 0 и все начинается снова. ???
(Знаю, что при перезапуске советника или терминала переменная обнулится)
Нну... Кто ж такое советовать будет именно из-за того, что закрытие терминала или перезапуск советника приведет к сбросу значения.
А глобальная переменная терминала хранится 4 недели, если к ней не обращаться совсем, т.е. никакие перезапуски не напрягают - это раз. И два - ее можно посмотреть и поменять самому по кнопочке F3 в терминале, что иногда удобно бывает.
Думаю простой переменной будет достаточно в моем случае. Терминал стоит на VPS. Мне нужно проверить в тестере стоит ли вообще заморачиваться.
Может кто подскажет код? Нужно запретить советнику торговать при достижении определенного процента прибыли и чтоб это ограничение действовало до начала следующего месяца, и потом вновь повторялось.
void OnTick()
{
double LastCalendarMonthProfit=GetProfitFromDateInCurrency(Symbol(),-1,Magic,TimeCurrent()-((TimeDay(TimeCurrent())*3600*24)+(TimeHour(TimeCurrent())*3600)+(TimeMinute(TimeCurrent())*60))); //Результат закрытых позиций с 1 числа до конца месяца
bool EquityPercent=(LastCalendarMonthProfit*100)/(AccountBalance()-LastCalendarMonthProfit) < 10; //Если прибыль меньше 10% == true
if (EquityPercent) //Если прибыль меньше 10% == true
result=OrderSend(...); //Открываемся
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание : Возвращает суммарный профит в валюте депозита |
//| закрытых с определённой даты позиций |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//| dt - Дата и время в секундах с 1970 года ( 0 - с начала истории) |
//+----------------------------------------------------------------------------+
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
double p=0;
int i, 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=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (dt<OrderCloseTime()) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
}
return(p);
}
Это не для новичков.
Код будет выглядеть так (надо протестить):
А в этих скобках "result=OrderSend(...)" что должно быть?
Открытие ордера.
bool OrderOpenBuy(int & aReturnedTicket,double aLots,double aSL,double aTP)
bool OrderOpenSell(int & aReturnedTicket,double aLots,double aSL,double aTP)
Это я понял)
Вот эти строчки мне не помогут?
иPHP:bool OrderOpenBuy(int & aReturnedTicket,double aLots,double aSL,double aTP)
PHP:bool OrderOpenSell(int & aReturnedTicket,double aLots,double aSL,double aTP)
if (EquityPercent) {
//здесь должны быть другие условия на открытие и само открытие.
}
Я еще понимаю попытки ограничить просадки, но вот прибыль - это да... :facepalm:Может кто подскажет код? Нужно запретить советнику торговать при достижении определенного процента прибыли и чтоб это ограничение действовало до начала следующего месяца, и потом вновь повторялось.
Я еще понимаю попытки ограничить просадки, но вот прибыль - это да... :facepalm:
С простой переменной и ограничением по пунктам проще? )Это не для новичков.
С простой переменной и ограничением по пунктам проще? )
Что-то получается. Буду проверять! Благодарю!!!Проще этого уже ничего не будет.
Исходник есть, НО я не программист ) Мне нужен кусок кода, который будет за это отвечать и я вставлю его в советник.
Что-то получается. Буду проверять! Благодарю!!!