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

 
Убрал барс, добавил отложенные ордера с Х шагом от цены, осталось только чтобы закрытые ордера сразу же открывались по отдельности а не ждал чтобы закрывались все 4 ордера и расчет лота в зависимости от % еквити, помогите исправить эти 2 нюанса
вот как выглядит сейчас:

//+------------------------------------------------------------------+
//| mo_bidir.mq4 |
//| Works best in 5M timeframe |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010 - Monu Ogbe"

#define MAGIC 1234
#define IDENT "mo_bidir"

extern double lots = 1;
extern double stop_loss = 76; //
extern double take_profit = 750; //
extern int steps = 5;// Шаг отложенных ордеров

int start(){

if (OrdersTotal() == 0){
OrderSend(Symbol(), OP_BUY, lots,Ask, 3, Ask - stop_loss * Point, Bid + take_profit * Point, IDENT, MAGIC, 0, Blue);
OrderSend(Symbol(), OP_SELL, lots,Bid, 3, Bid + take_profit * Point, Ask - take_profit * Point, IDENT, MAGIC, 0, Red);
OrderSend(Symbol(), OP_BUYSTOP, 0.5*lots,Ask+steps*Point, 3, Ask - stop_loss * Point, Bid + take_profit * Point, IDENT, MAGIC, 0, Blue);
OrderSend(Symbol(), OP_SELLSTOP, 0.5*lots,Bid-steps*Point, 3, Bid + take_profit * Point, Ask - take_profit * Point, IDENT, MAGIC, 0, Red);
}
return(0);
}
Файлы:
 
belck:
Ищу код безубытка по истории. мож у кого есть. поделитесь.
у меня есть код безубытка, но он работает изходя из открытых ордеров.
у меня советник закрывает убыточную при противоположном сигнале, и открывает по сигнал. и вот нужно что бы этот код безубытка запомнил сколько в минусе и передал информацию дальше, что бы второй и т.д. ордера уже видели на графике линию нуля по прибыли с учетом предыдущих убытков. Стопов у советника нету. а значит закрытие минусовой сделки не по стоплоссу.


проще паренной репы, делаете общий графический элемент - горизонтальная линия, цена этой линии и будет та цена которая вам нужна. каждый раз двигайте ее на нужную цену (безубыток с закрытием), и не удаляйте ее (линию) при закрытии ордера, в следующем ордере смотрите в ней ту старую цену
 
belck:
Ищу код безубытка по истории. мож у кого есть. поделитесь.
у меня есть код безубытка, но он работает изходя из открытых ордеров.
у меня советник закрывает убыточную при противоположном сигнале, и открывает по сигнал. и вот нужно что бы этот код безубытка запомнил сколько в минусе и передал информацию дальше, что бы второй и т.д. ордера уже видели на графике линию нуля по прибыли с учетом предыдущих убытков. Стопов у советника нету. а значит закрытие минусовой сделки не по стоплоссу.

Если я правильно понял, то составляющей Вашего вопроса является учет общего убытка при закрытых подряд убыточных сделках Вашего советника для последующего его сравнения с уровнем профита по текущим рыночным ордерам для установки линии б/у?
 
FAQ:

проще паренной репы, делаете общий графический элемент - горизонтальная линия, цена этой линии и будет та цена которая вам нужна. каждый раз двигайте ее на нужную цену (безубыток с закрытием), и не удаляйте ее (линию) при закрытии ордера, в следующем ордере смотрите в ней ту старую цену

проще та не проще.

у меня не получается реализовать самому.

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

тоесть мне нужна линия, которая будет рисоваться только, когда есть убыточные ордера, а эта линия будет исходить из лота у открытой сделки и предыдущей истории по убыточным сделкам.
 
Roman.:
Если я правильно понял, то составляющей Вашего вопроса является учет общего убытка при закрытых подряд убыточных сделках Вашего советника для последующего его сравнения с уровнем профита по текущим рыночным ордерам для установки линии б/у?

у меня линий стопов нет, тоесть нет стоплосса и нет тейк профита.

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

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

 
ВАм нужна глобальная переменная, сделайте ее в глобальных Терминала, или граф объектом - тогда она будет видна только на этом графике, пишите ее в файл если надо, ну или в реестр, или в память напрямую. Вариантов много.
 
FAQ:
ВАм нужна глобальная переменная, сделайте ее в глобальных Терминала, или граф объектом - тогда она будет видна только на этом графике, пишите ее в файл если надо, ну или в реестр, или в память напрямую. Вариантов много.
это вы мне ответили?
 
belck: а вот сам блок безубытка по истории не получается у меня написать.

Вот мой участок кода - отвечающий за учет общего убытка последовательных убыточных сделок именно этого эксперта (в соответствии с магиком). Я его сделал для своего варианта неттинговой Лавины - правьте под свои нужды - код закомментирован...

Глобальные переменные

double Current_Loss, Sum_Loss;     // текущий и суммарный убыток
int start()    // -----------------------СТАРТ ЭКСПЕРТА---------------
{

//---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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;
               }
            }
         }
      }
   }
 //Print("Iteration at History = ",  Iteration, " Time_at_History_Current = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS),
 //      " Time_at_History_Previos = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
...
...
}// конец старт   

После этого участка кода - также идете циклом уже по открытым ордерам именно этого советника и считаете их общий профит. После чего сравниваете это значение с переменной

Sum_Loss

и принимаете решение.

 
belck:
Ищу код безубытка по истории. мож у кого есть. поделитесь.
у меня есть код безубытка, но он работает изходя из открытых ордеров.
у меня советник закрывает убыточную при противоположном сигнале, и открывает по сигнал. и вот нужно что бы этот код безубытка запомнил сколько в минусе и передал информацию дальше, что бы второй и т.д. ордера уже видели на графике линию нуля по прибыли с учетом предыдущих убытков. Стопов у советника нету. а значит закрытие минусовой сделки не по стоплоссу.

Подсчитайте суммарный профит по всем закрытым сделкам и сохраните его в какой нибудь переменной, например, TotalCloseProfit. А далее с помощью нижеприведенного куска кода, без всякой графики и прочих лишних наворотов:

if (TotalCloseProfit) < 0.0) { // Имеем убыток по закрытым позам
  if ((AccountEquity() + TotalCloseProfit) >= AccountBalance()) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
  }
}
 
utyff:


Посмотрел я журнал.

похоже это причина, только что она означает я не знаю. Кто нибудь объяснит? И как ее исправить?

Это не ошибка. Ошибки в журнале помечаются красными, а не желтыми значками.
Причина обращения: