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

 
Можно ли вычислить минимальный эквити, используя исторические данные по ордерам?
 
forexnew:
Можно ли вычислить минимальный эквити, используя исторические данные по ордерам?


Вы одно поймите - что указывается в "исторических данных по ордерам"??? Вас интересует цена закрытия, профит ли, лосс ли по выбранному ордеру... ну и что из этого??? В истории ордеров не отображается насколько вошел счет в просадку по эквити (текущий убыток) во время нахождения ордера в рынке, т.е. убыток по его закрытию может составлять допустим -500 единиц валюты-это будет отображено в истории ордеров, в то время, как во время нахождения этого ордера в рынке эквити могла просесть и до -1000 единиц валюты. К сведению: Тестер стратегий считает убыток по эквити.

Ответ на Ваш вопрос: нельзя.

 
LOA:

Доброго дня!

Профи помогите - без вас никуда!

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

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

Написала индикатор (это мои первые шаги), который наглядно отображает пробой ME_Proboy_F5

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

Индикатор запрашивает данные из других индикаторов, все кроме одного ME_Proboy_F_5 (его код тоже размещаю) работают отлично. Во втором индикаторе тоже не могу найти ошибку. Он перерисовывается, но притормаживает, т.е корректно отображается при втором перезапуске( сменить т.ф. или вывести свойства).Если не затруднит, гляньте на него, пожалуйста, сама разобраться не могу.

Буду очень благодарна за помощь.

Proboy_Order_F5 - это основной индикатор, про который спрашиваю

ME_Proboy_F5 - второй, который вызывает сомнения


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

Применение ф-ции limit=MathMin(Bars-1, Bars-сounted_bars-1) не решило проблемы, но я, приняв рекомендации, поработала над стилем программирования, надеюсь получилось, избавилась от ненужных переменных.

Суть проблемы см. выше

Файлы:
 
Roman.:


Вы одно поймите - что указывается в "исторических данных по ордерам"??? Вас интересует цена закрытия, профит ли, лосс ли по выбранному ордеру... ну и что из этого??? В истории ордеров не отображается насколько вошел счет в просадку по эквити (текущий убыток) во время нахождения ордера в рынке, т.е. убыток по его закрытию может составлять допустим -500 единиц валюты-это будет отображено в истории ордеров, в то время, как во время нахождения этого ордера в рынке эквити могла просесть и до -1000 единиц валюты. К сведению: Тестер стратегий считает убыток по эквити.

Ответ на Ваш вопрос: нельзя.

Тем не менее есть индикатор: https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip в котором эквити каким-то образом вычисляется исходя из исторических данных. Каким образом, я пока не разобрался. Возможно эквити реально определить по ключевым моментам (закрытиям ордеров), а вот как это выглядит в виде одной формулы?

 

Вот есть код в котором по условию ордера должны удаляться по истечению времени, вот это условие

MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber

Так вот собственно, почему если вставить это условие в первый оператор if, то другой оператор который лежит внутри него не учитывает это условие?

То есть вот такой код не работает и удаляет все отложенные ордера сразу.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }

А вот такой код работает, и не удаляет ордера сразу.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP && MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }
 
sss2019:

Вот есть код в котором по условию ордера должны удаляться по истечению времени, вот это условие

Так вот собственно, почему если вставить это условие в первый оператор if, то другой оператор который лежит внутри него не учитывает это условие?

То есть вот такой код не работает и удаляет все отложенные ордера сразу.

А вот такой код работает, и не удаляет ордера сразу.

замечу, что оба кода некорректы, так что не знаю что у вас работает верно/не верно

Возьмем простейший пример. У вас 2 ордера, оба надо удалить.

1) for(int counter=0;counter<OrdersTotal();counter++)

начало хорошее 0 меньше двух и первый ордер благополучно удален, но далее...

2)

 for(int counter=0;counter<OrdersTotal();counter++)

counter = 1, но и ордер остался только один! то есть условие (1<1) не выполняется и цикл работу завершает...

 
ilunga:

замечу, что оба кода некорректы, так что не знаю что у вас работает верно/не верно

Возьмем простейший пример. У вас 2 ордера, оба надо удалить.

1) for(int counter=0;counter<OrdersTotal();counter++)

начало хорошее 0 меньше двух и первый ордер благополучно удален, но далее...

2)

counter = 1, но и ордер остался только один! то есть условие (1<1) не выполняется и цикл работу завершает...


Нет, но в том то и дело что в этом моменте он удаляет ВСЕ ордера, подчистую. Проблема в том что он удаляет их сразу же.
 
LOA:

Доброго дня!

Написала индикатор (это мои первые шаги), который наглядно отображает пробой ME_Proboy_F5


Хороши у Вас, Ольга Александровна первые шаги. 330 строк кода

 
forexnew:

Тем не менее есть индикатор: https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip .в котором эквити каким-то образом вычисляется исходя из исторических данных. Каким образом, я пока не разобрался. Возможно эквити реально определить по ключевым моментам (закрытиям ордеров), а вот как это выглядит в виде одной формулы?




Познакомьтесь с понятиями ЭКВИТИ и БАЛАНС, в чем их различие.

Этот индикатор показывает линию эквити в реальном времени, т.к. линия эквити - это текущие прибыль/убыток по незакрытым позам,"Возможно эквити реально определить по ключевым моментам (закрытиям ордеров)" - не возможно, так Вы будете считать изменение линии баланса по закрытым позам.

" .в котором эквити каким-то образом вычисляется исходя из исторических данных. " - нет. Данный индикатор считает линию эквити на текущий момент - по открытым позициям в Рынке.

 

Добрый вечер! Нашёл это в учебнике С. Ковалёва, а в терминале МТ4 кроме "гав!" ничего нет. Подскажите, пожалуйста, кто знает, где позаимствовать набор звуковых сигналов по различным операциям, чтобы не впериваться всё время в комп? Спасибо за возможную подсказку!

   switch(Mess_Number)                 // Elegir texto del mensaje segun el numero 
     {
      case 1:
         Graf_Text="Closed order Buy "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 2:
         Graf_Text="Closed order Sell "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 3:
         Graf_Text="Deleted pending order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 4:
         Graf_Text="Opened order Buy "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 5:
         Graf_Text="Opened order Sell "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 6:
         Graf_Text="Placed pending order "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 7:
         Graf_Text="Order "+Number+" modified into the market one";
         PlaySound("Transform.wav");                                break;
      case 8:
         Graf_Text="Reopened order "+ Number;
         PlaySound("Bulk.wav");                                     break;
      case 9:
         Graf_Text="Partly closed order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 10:
         Graf_Text="New minimum distance: "+ Number;
         PlaySound("Inform.wav");                                   break;
      case 11:
         Graf_Text=" Not enough money for "+
         DoubleToStr(Value,2) + " lots";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 12:
         Graf_Text="Trying to close order "+ Number;
         PlaySound("expert.wav");                                   break;
      case 13:
         if (Number>0)
            Graf_Text="Trying to open order Sell..";
         else
            Graf_Text="Trying to open order Buy..";
         PlaySound("expert.wav");                                   break;
      case 14:
         Graf_Text="Invalid password. EA doesn't function.";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 15:
         switch(Number)                 // Elegir texto del mensaje segun el numero del error 
           {
            case 2:   Graf_Text="Common error.";                    break;
            case 129: Graf_Text="Wrong price. ";                    break;
            case 135: Graf_Text="Price changed. ";                  break;
            case 136: Graf_Text="No prices. Awaiting a new tick.."; break;
            case 146: Graf_Text="Trading subsystem is busy";        break;
            case 5 :  Graf_Text="Old version of the terminal.";     break;
            case 64:  Graf_Text="Account is blocked.";              break;
            case 133: Graf_Text="Trading is prohibited";            break;
            default:  Graf_Text="Occurred error " + Number;//otros errores 
           }
         Color_GT=Red;
         PlaySound("Error.wav");                                    break;
      case 16:
         Graf_Text="Expert Advisor works only for EURUSD";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      default:
         Graf_Text="default "+ Mess_Number;
         Color_GT=Red;
         PlaySound("Bzrrr.wav");                    
     }
Причина обращения: