Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 400

 
khorosh:


Спасибо, Юрий.
Ваш код я постараюсь использовать, но позже, поскольку его нужно разобрать и понять принцип работы.
Выше описанный этап несложен, далее мне придется разобрать каждую пользовательскую функцию мистера "Н", а это имеет высшую степень сложности, соответственно займет много времени, от 3 до 10 часов (как говорят: - Один день. -).

Доработаю свой код, там "моя среда обитания" и изучать в ней нечего.

Еще раз благодарю, Юрий.




borilunad:
1 - Он ничего не может! 2 - Только хочет, чтобы ему написали! 3 - Объяснять бесполезно! 4 - Логика напрочь отсутствует! 5 - Неисправимый двоечник!

1 - Относительно - да.
2 - Помогли разобрать ситуацию.
3 - Совсем не бесполезно.
4 - Из - за того, что вам отвечаю - да.
5 - Окончил полугодие с пятью четверками, все остальные оценки - пять.

Вы нарушили правила форума, так же как и я.
Сейчас ваш аккаунт достоин предупреждения, мой аккаунт достоин бана.

Прошу простить за нерациональные действия (ответ на критиканство).
 
Link_x:

Спасибо, Юрий.
Ваш код я постараюсь использовать, но позже, поскольку его нужно разобрать и понять принцип работы.
Выше описанный этап несложен, далее мне придется разобрать каждую пользовательскую функцию мистера "Н", а это имеет высшую степень сложности, соответственно займет много времени, от 3 до 10 часов (как говорят: - Один день. -).

Доработаю свой код, там "моя среда обитания" и изучать в ней нечего.

Еще раз благодарю, Юрий.






Для начала не обязательно вникать в код каждой функции. Достаточно разобраться с параметрами, которые используются в функции, её назначение и использование. Я собственно и сам то во внутренности каждой функции не вникал. А вникал только тогда, когда требовалось её в чём то изменить. Вот вы успешно в жизни используете мобильник, компьютер, телевизор, хотя детально их схемы и их работу не знаете, но это не мешает вам их использовать для своих целей. Так и здесь, главное уметь использовать эти функции. Вот здесь описаны все функции и их назначение. Как их использовать можно понять из тестов которые приведены для каждой функции. Становление вас как программиста произойдёт быстрее, если вы пойдёте по этому пути. А изобретательство своего велосипеда - это долгий и малопродуктивный путь. Строительство эксперта - по вашему варианту - это как строительство дома при отсутствии строительных материалов. Всё надо придумывать самому. Гораздо быстрее можно построить дом, когда есть строительные блоки(функции).
 

Добрый день!

Подскажите, пожалуйста, функция AccountEquity() делает запрос к терминалу или к брокеру?

Вопрос вызван предположением, что вызов данной функции на каждом тике может вызвать раздражение у брокера (особенно при одновременном запуске советника на нескольких графиках) и, соответственно, блокировку счёта?

 
yan720:

Добрый день!

Подскажите, пожалуйста, функция AccountEquity() делает запрос к терминалу или к брокеру?

Вопрос вызван предположением, что вызов данной функции на каждом тике может вызвать раздражение у брокера (особенно при одновременном запуске советника на нескольких графиках) и, соответственно, блокировку счёта?


Да к брокеру конечно)))

Терминалу пофигу.... Даст Вам последние известные данные...

 
vadynik:
Вопрос нужно ли передавать в функцию Magic или нет?

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

double BuystopPrice(int Magic = -1)
{
double Price=0;
  for (int i=OrdersTotal()-1; i>=0; i--) 
     {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
          if(OrderMagicNumber()==Magic && OrderType()==OP_BUYSTOP)
          {
           Price = OrderOpenPrice();
          break;
          }
        }
     }
    return(Price);
}

А вообще поскольку код вашей функции определяет цену установки только первого в цикле for ордера бай-стоп, то и сам цикл в принципе не нужен.

 
khorosh:
Для начала не обязательно вникать в код каждой функции. Достаточно разобраться с параметрами, которые используются в функции, с её назначение и использование. Я собственно и сам то во внутренности каждой функции не вникал. А вникал только тогда, когда требовалось её в чём то изменить. Вот вы успешно в жизни используете мобильник, компьютер, телевизор, хотя детально их схемы и их работу не знаете, но это не мешает вам их использовать для своих целей. Так и здесь, главное уметь использовать эти функции. Вот здесь описаны все функции и их назначение. Как их использовать можно понять из тестов которые приведены для каждой функции. Становление вас как программиста произойдёт быстрее, если вы пойдёте по этому пути. А изобретательство своего велосипеда - это долгий и малопродуктивный путь. Строительство эксперта - по вашему варианту - это как строительство дома при отсутствии строительных материалов. Всё надо придумывать самому. Гораздо быстрее можно построить дом, когда есть строительные блоки(функции).


Вы мудрый человек, умеющий объяснить и переубедить если это потребуется. :)
На том я снова вас благодарю.

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

Посмотрите пожалуйста две функции на наличие ошибок в них.

Суть первой: должна рассчитывать лот необходимый для выхода из просадки после закрытия сетки ордеров (открытых по мартину) если цена пройдет определенное количество пунктов (TP-к-во пунктов) в нужную сторону.

Суть второй: должна закрывать половину ордеров сетки начиная с самого старого.

double FindRightLot (int otype) // функция поиска лота, необходимого для выхода из просадки после 
                               //закрытия сетки ордеров
{
  double Lot=0; double TotalLot=0;
  for (int i = OrdersTotal()-1; i>0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         {
           Lot = NormalizeDouble ((OrderOpenPrice()-Bid)*OrderLots()/TP,2); 
           if (Lot>0)
           {
              TotalLot= NormalizeDouble (TotalLot+Lot,2);
           }
         }
           
       
         else if (otype == OP_SELL)
         {
           Lot = NormalizeDouble ((Ask-OrderOpenPrice())*OrderLots()/TP,2);
           if (Lot>0)
           {
            TotalLot= NormalizeDouble (TotalLot+Lot,2);
           }
           
         }
       }
     }
   }
   return (TotalLot);
   
 }
//+------------------------------------------------------------------+

void CloseHalfOrders (int otype)// ф-ция закрытия половины ордеров сетки
{
  int count = 0;
  for (int i = 0; i<= OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         { 
           if (count<CountTrades(OP_BUY)/2 && CountTrades(OP_BUY)>3 )
           
             OrderClose(OrderTicket(),OrderLots(),Bid,0,Black);
             count++;
           
         }
       
       
         else if (otype == OP_SELL)
         {
           if (count<CountTrades(OP_SELL)/2 && CountTrades(OP_SELL)>3)
           
           OrderClose(OrderTicket(),OrderLots(),Ask,0,Black);
           count++;
           
         }
       }
     }
   }
   
 }
 
Ребята, ну нельзя так...Вам млин в MQL5 прямиком, токо там ПОЗИЦИИ открывются целиком....
 
yan720:


Подскажите, пожалуйста, функция AccountEquity() делает запрос к терминалу или к брокеру?

к терминалу
 
vadynik:


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

или его надо передавать в функцию, хотя подозреваю не надо раз он глобальный

Если в глобальной переменной, то да увидит. Но функция должна обладать универсальностью и работать не с одним магиком, а для этого лучше его передавать в виде параметра функции.
Причина обращения: