Получил ответы от двух добрых людей,но к сожалению ни один из вариантов не подошел.
Уважаемые профи, подскажите,пожалуйста, еще .Повторюсь, Пишу советник и вот затупил на след.моменте:
По определенной схеме открываются ордера, они могут закрыться в день открытия,а могут еще 3 дня гулять в рынке.
Я не могу понять, как прописать так, чтобы я мог найти ордер,который гуляет уже в течение 3 дней, и закрыть его, при этом не закрывая ордера, открытый позже него.
Схема открытия для всех ордеров одинаковая. Присваиваю всем магики след. образом: Magic_s =Magic_s+1.
Варинат нужен,чтобы система автоматически находила и закрывала этот ордер, т.к. есть необходимость протестировать систему на исторических данных
Пожалуйста, если кто-то знает как решить эту задачу - напишите ответ. Буду Вам очень благодарен :)
Понял. Спасибо большое. Как вариант хороший,единственное при таком варианте не могу протестить систему по историческим данным. Вот и хотел автоматически как-то прописать. Если будут еще какие-то варианты-напишите пожалукйста
Для тестирования на истории надо определиться с условием закрытия позиции. Профит/лосс или время жизни позиции, напр. не более 3 дней. Это можно сделать модифицировав datetime expiration ордера/позиции с помощью OrderModify.
paladin80: Для тестирования на истории надо определиться с условием закрытия позиции. Профит/лосс или время жизни позиции, напр. не более 3 дней. Это можно сделать модифицировав datetime expiration ордера/позиции с помощью OrderModify.
Да,получается у нас будет условия закрытия - это время жизни позиции,все правильно, не более 3 дней. Почитал про OrderModify, пока не понял до конца. Попробую вечером разобраться. Еще раз большое спасибо за ответ,очень оперативный:)
Сорри, чт не по языку, но очень нужно, мож кто знает.
В виндовсе 7 некоторые файлы отказались открываться. Жму "Открыть с помощью...", выбираю программу и она НЕ появляется в списке выбора программ. Мож кто знает, как убрать это ограничение? На ХР этого небыло. Долбанная семёрка уже весь мозг съела :(
Подозреваю, что нужно вычистить реестр. Конкретно, не открывается двойным кликом формат FB2. CoolReader запускаю и всё нормально. им открывается. двойным кликом запускать файл формата fb2 не хочет.
Запустил поиск по реестру утиллитой JV-16 (всегда ею пользовался) - дык она нашла столько строк реестра, где упоминается fb2, что ужас просто - убивать аж боязно. Что делать-то? Поиск в гугле ни чего не дал :(
помогите переделать код. Код не новый, но что то у меня не получается.
вот код:
*///-----------------Закрытие по истории в безубыток--------------------//---------------------расчет по истории ордеров номера очередной итерации-----------------------------------------------
Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
Sum_Loss = 0; // суммарный убыток по этим итерациямdatetime
Time_at_History_Current = 0,
Time_at_History_Previos = 0;
if(OrdersHistoryTotal() != 0)
{
for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
{
OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера// для последующего его анализа при подсчете количества итераций
{
double lastLoss = OrderProfit();
Sum_Loss=Sum_Loss+lastLoss; // считаем общий убыток по закрытым подряд убыточным ордерам
Time_at_History_Current = OrderCloseTime();
}
//Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));//Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
{
Time_at_History_Previos = Time_at_History_Current ;
Iteration++;
//Print("Iteration at History в условии сравнения = ", Iteration);
}
else// они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
{
if(OrderProfit() >= 0)
break;
}
}
}
}
}
if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позамif (((AccountEquity() + Sum_Loss + (Sum_Loss * 0.25)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка// Здесь какой-то код, который необходимо выполнить при достижении безубытка
CloseAllBuy();
CloseAllSell();
Sum_Loss = 0.0;
}
}
//-----------------------------------------------------------------
Как не старался все не получается сделать, что бы открывался цикл при достижении минусовой сделки, а после при достижении положительной сделки, если была минусовая, то уменьшал минусовой баланс на прибыль закрытую последнего ордера, который больше нуля. То есть, если ордер закрылся в минус, то начинаем работать, если следующая сделка по прибыли больше убытка, то закрываемся, если по следующей сделки закрылись в плюс, но этот плюс не больше минуса, по предыдущим ордерам, то этот плюс от минусовуем от отрицательного баланса, и следующий ордер сравниваем с новым показателям, который уже уже меньше, так как мы перед этим закрылись в минус. Закрываемся по тралу. поэтомк и допустим положительный балнс.
Сорри, чт не по языку, но очень нужно, мож кто знает.
В виндовсе 7 некоторые файлы отказались открываться. Жму "Открыть с помощью...", выбираю программу и она НЕ появляется в списке выбора программ. Мож кто знает, как убрать это ограничение? На ХР этого небыло. Долбанная семёрка уже весь мозг съела :(
Подозреваю, что нужно вычистить реестр. Конкретно, не открывается двойным кликом формат FB2. CoolReader запускаю и всё нормально. им открывается. двойным кликом запускать файл формата fb2 не хочет.
Запустил поиск по реестру утиллитой JV-16 (всегда ею пользовался) - дык она нашла столько строк реестра, где упоминается fb2, что ужас просто - убивать аж боязно. Что делать-то? Поиск в гугле ни чего не дал :(
Пуск - Все программы - Программы по умолчанию - Задать сопоставления
Сорри, чт не по языку, но очень нужно, мож кто знает.
В виндовсе 7 некоторые файлы отказались открываться. Жму "Открыть с помощью...", выбираю программу и она НЕ появляется в списке выбора программ. Мож кто знает, как убрать это ограничение? На ХР этого небыло. Долбанная семёрка уже весь мозг съела :(
Подозреваю, что нужно вычистить реестр. Конкретно, не открывается двойным кликом формат FB2. CoolReader запускаю и всё нормально. им открывается. двойным кликом запускать файл формата fb2 не хочет.
Запустил поиск по реестру утиллитой JV-16 (всегда ею пользовался) - дык она нашла столько строк реестра, где упоминается fb2, что ужас просто - убивать аж боязно. Что делать-то? Поиск в гугле ни чего не дал :(
Суть стратегии: Вход по сигралу стохастика(5,14,3) выход тоже по стохастику только с другим периодом (5,3,3). Вот я не пойму как можно зделать выход по стохастику, а не по обратному сигнагалу? У меня появилась проблема и я не представляю как ее можно решить постараюсь объяснить. Значит в коде есть, который я выложил, есть 2 функции //+------------------------------------------------------------------+ //| подготовить массив тикетов для закрытия | //+------------------------------------------------------------------+ void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) { int size=ArrayRange(arrayTickets,0); //---- if (size==0) return;
int i,type,ticket,closeSize; for (i=0;i<size;i++) { type=arrayTickets[i][1]; // если тип ордера не рыночный, то пропускаем if (type>OP_SELL) continue;
if (Revers) // перевернем тип рыночного ордера { if (type==OP_BUY) type=OP_SELL; else type=OP_BUY; } // тут решаем для каждого открытого ордера его судьбу // оставить в рынке или добавить в массив на закрытие if (type==OP_BUY) { // // код разрешающий оставить покупку
// как пример if (signal==OP_BUY) continue; }
if (type==OP_SELL) { // // код разрешающий оставить продажу
// здесь укажем сколько лотов нужно закрыть lots[closeSize] = arrayTickets[i][2]; // закрываемый объем // можно закрывать частично, тогда нужно переписать строку сверху } //---- return; }
//+------------------------------------------------------------------+ //| Закрывает ордера с указанными тикетами | //+------------------------------------------------------------------+ void CloseMarketOrders(int ticketsArray[][2], double lotsArray[]) { //---- int i,size=ArrayRange(ticketsArray,0); if (size==0) return;
int ticket,type; double lots; bool res;
int total=OrdersTotal();
for (i=0;i<size;i++) { ticket = ticketsArray[i][0]; type = ticketsArray[i][1]; lots = lotsArray[i]; RefreshRates(); // на всякий случай обновим сведения о рыночном окружении
// блок закрытия покупок if (type==OP_BUY) { res = OrderClose(ticket,lots,Bid,Slippage,Orange); if (!res) { Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError()); // дальнейшая обработка ошибки, написать самостоятельно } }
// блок закрытия продаж if (type==OP_SELL) { res = OrderClose(ticket,lots,Ask,Slippage,Orange); if (!res) { Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError()); // дальнейшая обработка ошибки, написать самостоятельно } }
} //---- return; }
В функции void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) нужно поставить условие после которого решиться оставлять ордер или закрывать его... Пробовал ставить условия но ничего не получается.... Может кто нибуть посмотрит и кажет есть ли в этих функциях ошибка или это я накасячил....
Добрый день еще раз!
Получил ответы от двух добрых людей,но к сожалению ни один из вариантов не подошел.
Уважаемые профи, подскажите,пожалуйста, еще .Повторюсь, Пишу советник и вот затупил на след.моменте:
По определенной схеме открываются ордера, они могут закрыться в день открытия,а могут еще 3 дня гулять в рынке.
Я не могу понять, как прописать так, чтобы я мог найти ордер,который гуляет уже в течение 3 дней, и закрыть его, при этом не закрывая ордера, открытый позже него.
Схема открытия для всех ордеров одинаковая. Присваиваю всем магики след. образом: Magic_s =Magic_s+1.
Варинат нужен,чтобы система автоматически находила и закрывала этот ордер, т.к. есть необходимость протестировать систему на исторических данных
Пожалуйста, если кто-то знает как решить эту задачу - напишите ответ. Буду Вам очень благодарен :)
Понял. Спасибо большое. Как вариант хороший,единственное при таком варианте не могу протестить систему по историческим данным. Вот и хотел автоматически как-то прописать. Если будут еще какие-то варианты-напишите пожалукйста
Для тестирования на истории надо определиться с условием закрытия позиции. Профит/лосс или время жизни позиции, напр. не более 3 дней. Это можно сделать модифицировав datetime expiration ордера/позиции с помощью OrderModify.
Да,получается у нас будет условия закрытия - это время жизни позиции,все правильно, не более 3 дней. Почитал про OrderModify, пока не понял до конца. Попробую вечером разобраться. Еще раз большое спасибо за ответ,очень оперативный:)
Сорри, чт не по языку, но очень нужно, мож кто знает.
В виндовсе 7 некоторые файлы отказались открываться. Жму "Открыть с помощью...", выбираю программу и она НЕ появляется в списке выбора программ. Мож кто знает, как убрать это ограничение? На ХР этого небыло. Долбанная семёрка уже весь мозг съела :(
Подозреваю, что нужно вычистить реестр. Конкретно, не открывается двойным кликом формат FB2. CoolReader запускаю и всё нормально. им открывается. двойным кликом запускать файл формата fb2 не хочет.
Запустил поиск по реестру утиллитой JV-16 (всегда ею пользовался) - дык она нашла столько строк реестра, где упоминается fb2, что ужас просто - убивать аж боязно. Что делать-то? Поиск в гугле ни чего не дал :(
Приветствую!
помогите переделать код. Код не новый, но что то у меня не получается.
вот код:
Как не старался все не получается сделать, что бы открывался цикл при достижении минусовой сделки, а после при достижении положительной сделки, если была минусовая, то уменьшал минусовой баланс на прибыль закрытую последнего ордера, который больше нуля. То есть, если ордер закрылся в минус, то начинаем работать, если следующая сделка по прибыли больше убытка, то закрываемся, если по следующей сделки закрылись в плюс, но этот плюс не больше минуса, по предыдущим ордерам, то этот плюс от минусовуем от отрицательного баланса, и следующий ордер сравниваем с новым показателям, который уже уже меньше, так как мы перед этим закрылись в минус. Закрываемся по тралу. поэтомк и допустим положительный балнс.
Сорри, чт не по языку, но очень нужно, мож кто знает.
В виндовсе 7 некоторые файлы отказались открываться. Жму "Открыть с помощью...", выбираю программу и она НЕ появляется в списке выбора программ. Мож кто знает, как убрать это ограничение? На ХР этого небыло. Долбанная семёрка уже весь мозг съела :(
Подозреваю, что нужно вычистить реестр. Конкретно, не открывается двойным кликом формат FB2. CoolReader запускаю и всё нормально. им открывается. двойным кликом запускать файл формата fb2 не хочет.
Запустил поиск по реестру утиллитой JV-16 (всегда ею пользовался) - дык она нашла столько строк реестра, где упоминается fb2, что ужас просто - убивать аж боязно. Что делать-то? Поиск в гугле ни чего не дал :(
Пуск - Все программы - Программы по умолчанию - Задать сопоставления
Сорри, чт не по языку, но очень нужно, мож кто знает.
В виндовсе 7 некоторые файлы отказались открываться. Жму "Открыть с помощью...", выбираю программу и она НЕ появляется в списке выбора программ. Мож кто знает, как убрать это ограничение? На ХР этого небыло. Долбанная семёрка уже весь мозг съела :(
Подозреваю, что нужно вычистить реестр. Конкретно, не открывается двойным кликом формат FB2. CoolReader запускаю и всё нормально. им открывается. двойным кликом запускать файл формата fb2 не хочет.
Запустил поиск по реестру утиллитой JV-16 (всегда ею пользовался) - дык она нашла столько строк реестра, где упоминается fb2, что ужас просто - убивать аж боязно. Что делать-то? Поиск в гугле ни чего не дал :(
Ребята...помогите кто знает!!!!
У меня появилась проблема и я не представляю как ее можно решить постараюсь объяснить.
Значит в коде есть, который я выложил, есть 2 функции
//+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;
int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаем
if (type>OP_SELL) continue;
if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}
// тут решаем для каждого открытого ордера его судьбу
// оставить в рынке или добавить в массив на закрытие
if (type==OP_BUY)
{
//
// код разрешающий оставить покупку
// как пример
if (signal==OP_BUY) continue;
}
if (type==OP_SELL)
{
//
// код разрешающий оставить продажу
// как пример
if (signal==OP_SELL) continue;
}
closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера
// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем
// можно закрывать частично, тогда нужно переписать строку сверху
}
//----
return;
}
//+------------------------------------------------------------------+
//| Закрывает ордера с указанными тикетами |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;
int ticket,type;
double lots;
bool res;
int total=OrdersTotal();
for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении
// блок закрытия покупок
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}
// блок закрытия продаж
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}
}
//----
return;
}
В функции void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) нужно поставить условие после которого решиться оставлять ордер или закрывать его...
Пробовал ставить условия но ничего не получается....
Может кто нибуть посмотрит и кажет есть ли в этих функциях ошибка или это я накасячил....
Пуск - Все программы - Программы по умолчанию - Задать сопоставления
Эта операция приводит к окну выбора программ. Указываем прогу и она там не появляется.