[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 372

 

Добрый день еще раз!

Получил ответы от двух добрых людей,но к сожалению ни один из вариантов не подошел.

Уважаемые профи, подскажите,пожалуйста, еще .Повторюсь, Пишу советник и вот затупил на след.моменте:

По определенной схеме открываются ордера, они могут закрыться в день открытия,а могут еще 3 дня гулять в рынке.

Я не могу понять, как прописать так, чтобы я мог найти ордер,который гуляет уже в течение 3 дней, и закрыть его, при этом не закрывая ордера, открытый позже него.

Схема открытия для всех ордеров одинаковая. Присваиваю всем магики след. образом: Magic_s =Magic_s+1.

Варинат нужен,чтобы система автоматически находила и закрывала этот ордер, т.к. есть необходимость протестировать систему на исторических данных

Пожалуйста, если кто-то знает как решить эту задачу - напишите ответ. Буду Вам очень благодарен :)

 
Boneshapper:

Понял. Спасибо большое. Как вариант хороший,единственное при таком варианте не могу протестить систему по историческим данным. Вот и хотел автоматически как-то прописать. Если будут еще какие-то варианты-напишите пожалукйста
Для тестирования на истории надо определиться с условием закрытия позиции. Профит/лосс или время жизни позиции, напр. не более 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;
           
  
  }
}
//-----------------------------------------------------------------

Как не старался все не получается сделать, что бы открывался цикл при достижении минусовой сделки, а после при достижении положительной сделки, если была минусовая, то уменьшал минусовой баланс на прибыль закрытую последнего ордера, который больше нуля. То есть, если ордер закрылся в минус, то начинаем работать, если следующая сделка по прибыли больше убытка, то закрываемся, если по следующей сделки закрылись в плюс, но этот плюс не больше минуса, по предыдущим ордерам, то этот плюс от минусовуем от отрицательного баланса, и следующий ордер сравниваем с новым показателям, который уже уже меньше, так как мы перед этим закрылись в минус. Закрываемся по тралу. поэтомк и допустим положительный балнс.

 
drknn:

Сорри, чт не по языку, но очень нужно, мож кто знает.

В виндовсе 7 некоторые файлы отказались открываться. Жму "Открыть с помощью...", выбираю программу и она НЕ появляется в списке выбора программ. Мож кто знает, как убрать это ограничение? На ХР этого небыло. Долбанная семёрка уже весь мозг съела :(

Подозреваю, что нужно вычистить реестр. Конкретно, не открывается двойным кликом формат FB2. CoolReader запускаю и всё нормально. им открывается. двойным кликом запускать файл формата fb2 не хочет.

Запустил поиск по реестру утиллитой JV-16 (всегда ею пользовался) - дык она нашла столько строк реестра, где упоминается fb2, что ужас просто - убивать аж боязно. Что делать-то? Поиск в гугле ни чего не дал :(


Пуск - Все программы - Программы по умолчанию - Задать сопоставления
 
drknn:

Сорри, чт не по языку, но очень нужно, мож кто знает.

В виндовсе 7 некоторые файлы отказались открываться. Жму "Открыть с помощью...", выбираю программу и она НЕ появляется в списке выбора программ. Мож кто знает, как убрать это ограничение? На ХР этого небыло. Долбанная семёрка уже весь мозг съела :(

Подозреваю, что нужно вычистить реестр. Конкретно, не открывается двойным кликом формат FB2. CoolReader запускаю и всё нормально. им открывается. двойным кликом запускать файл формата fb2 не хочет.

Запустил поиск по реестру утиллитой JV-16 (всегда ею пользовался) - дык она нашла столько строк реестра, где упоминается fb2, что ужас просто - убивать аж боязно. Что делать-то? Поиск в гугле ни чего не дал :(

http://rhpc.ru/topic/200/
 

Ребята...помогите кто знает!!!!


Суть стратегии: Вход по сигралу стохастика(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)
{
//
// код разрешающий оставить продажу

// как пример
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]) нужно поставить условие после которого решиться оставлять ордер или закрывать его...
Пробовал ставить условия но ничего не получается....
Может кто нибуть посмотрит и кажет есть ли в этих функциях ошибка или это я накасячил....
Файлы:
osc_test.mq4  37 kb
 
А может ли bid равен 0 в потоке тиков?(иногда) во время торговой сессии
 
tara:

Пуск - Все программы - Программы по умолчанию - Задать сопоставления

Эта операция приводит к окну выбора программ. Указываем прогу и она там не появляется.
Причина обращения: