vypchela

 
Уровень 12

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от vypchela



Советник по Фибоначчи Комментариев 8
2020-11-10 16:12:30Рейтинг 0

Советник для МТ5 Комментариев 17
2022-10-22 17:34:39Рейтинг 0

ATR Канал

Андрей требуется помощь. Нужно рассчитать расстояние между двумя линиями как указано на скриншоте, например расстояние не должно быть больше 100 пунктов, если коротко — нужна формула расчета для советника. Самому сделать расчет не удалось. Код индикатора можно посмотреть на MQL

За ранее спасибо.
  • 0
  • Просмотров: 2182
  • 28 ноября 2021, 11:56
  • vypchela
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Самовыставляющий советник
Следующая запись в группе  
Индикатор TrendLine 2.0 на МТ5
27 ноября 2021
28 ноября 2021

Брокер для ваших роботов, 15 лет на рынке

Комментарии (19)

+
0
В индикаторе есть формула:
Ch1up_Buffer1[i] = ma + atr*Mult_Factor1;
ее применить не получилось?
Это линейно-взвешенная машка с тремя уровнями вверх и вниз.
Редактирован: 28 ноября 2021, 14:14
avatar

  14  verta81 Сообщений: 390

  • 28 ноября 2021, 14:11
+
0
Нужно рассчитать расстояние между двумя линиями как указано на скриншоте, например расстояние не должно быть больше 100 пунктов, если коротко — нужна формула расчета для советника


double up=iCustom(NULL,0,...,1,0);
double dn=iCustom(NULL,0,...,2,0);

if((up-dn)<100*_Point)
{

}
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 28 ноября 2021, 14:24
+
0
Спасибо Андрей, это то что надо, все работает :) 
avatar

  12  vypchela Автор Сообщений: 112

  • 28 ноября 2021, 15:50
+
0
Андрей подскажи как сделать, данный код закрывает общую сумму ордеров в процентах, можно ли сделать так чтобы в процентах закрывался только один ордер? код твой, за ранее спасибо!

double pro=(AllProfit()/AccountBalance())*100;
if(pro>=Procent && Procent>0)// 2000/10000*100=20
CloseAll();


void CloseAll(int ot=-1)
  {

   bool cl;
   if(Prof)
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol()&& OrderMagicNumber() == MagicNumber)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slippage,Gold); // White
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slippage,Gold);
              }
           }
        }
     }
  }
// +------------------------------------------------------------------+
// | Профит всех ордеров по типу ордера                               |
// +------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   
   double pr=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol()&& OrderMagicNumber() == MagicNumber)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
avatar

  12  vypchela Автор Сообщений: 112

  • 30 ноября 2021, 18:04
+
0
Надо смотреть весь код.
avatar

  16  ssg Сообщений: 817

  • 30 ноября 2021, 18:18
+
0
Буду ждать ответа от Андрея, может что предложит.
avatar

  12  vypchela Автор Сообщений: 112

  • 1 декабря 2021, 10:10
+
0
В обоих функциях идет перебор всех позиций — значит она не одна. Вопрос-какую позицию надо закрыть?
Этого в коде нет.Дело ваше, шифроваться или ожидать возможной помощи.
avatar

  16  ssg Сообщений: 817

  • 1 декабря 2021, 11:15
+
0
Ни кто не шифруется, прикрутите выше изложенное в любой код Андрея.
avatar

  12  vypchela Автор Сообщений: 112

  • 1 декабря 2021, 11:32
+
0
прикрутить не проблема!
"… сделать так чтобы в процентах закрывался только один ордер?..."
Какой ордер? первый, последний?
avatar

  14  verta81 Сообщений: 390

  • 1 декабря 2021, 11:34
+
0
Да, чтобы закрывался в процентах один ордер либо покупка, либо продажа.
avatar

  12  vypchela Автор Сообщений: 112

  • 1 декабря 2021, 11:56
+
0

//---------------закрывает селл--------------
double pro=(AllProfit(1)/AccountBalance())*100;
if(pro>=Procent && Procent>0)// 2000/10000*100=20
CloseAll(1);//закрывает селл
//------------------------закрывает бай--------------------
double pro=(AllProfit(0)/AccountBalance())*100;
if(pro>=Procent && Procent>0)// 2000/10000*100=20
CloseAll(0);//закрывает бай
avatar

  14  verta81 Сообщений: 390

  • 1 декабря 2021, 12:24
+
0
Спасибо, сейчас проверим.
avatar

  12  vypchela Автор Сообщений: 112

  • 1 декабря 2021, 12:35
+
0
Проверил. Все равно закрывает общей суммой в процентах.
avatar

  12  vypchela Автор Сообщений: 112

  • 1 декабря 2021, 13:02
+
0
правильно, общая сумма бай или селл.
поэтому и спрашивали: какой ордер закрывать? последний?
avatar

  14  verta81 Сообщений: 390

  • 1 декабря 2021, 13:29
+
0
Разъясните, не совсем понимаю Какой ордер? первый, последний? мне не нужно чтобы ордера закрывались общей суммой, а каждый ордер по отдельности.
avatar

  12  vypchela Автор Сообщений: 112

  • 1 декабря 2021, 13:49
+
0

void OnTick()
  {
    CloseOne();
//--------------
   
  }


// +------------------------------------------------------------------+
// |                                                                  |
// +------------------------------------------------------------------+
void CloseOne()
  {
   bool cl;
   double pr=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol()&& OrderMagicNumber() == MagicNumber)
           {
            if(OrderType()<2)
              {
               pr=OrderProfit()+OrderCommission()+OrderSwap();
               double pro=(pr/AccountBalance())*100;
               if(pro>=Procent && Procent>0)
                 {
                  RefreshRates();
                  cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slippage,Gold);
                 }
              }
           }
        }
     }
  }
avatar

  14  verta81 Сообщений: 390

  • 1 декабря 2021, 14:11
+
0
Надо посмотреть для начала как открываются позиции и сколько их открывается. Может нужно ограничить только открывать или продажу или покупку.И тогда возможно решение задачи.
Вот об этом я и писал выше.Человек видно не понял.Мне кажется он сам внятно не может пояснить что хочет, возможно по коду советника это можно было бы понять.
Кода — нет, пояснений — нет, а значит и решения нет.
avatar

  16  ssg Сообщений: 817

  • 1 декабря 2021, 15:49
+
0
Спасибо всем, разобрался. Дело в самом коде.
avatar

  12  vypchela Автор Сообщений: 112

  • 1 декабря 2021, 17:58
+
0
«А ларчик просто открывался.» Хочу ещё предупредить — значения профита и баланса величины не постоянные. Значит при равных процентах в разное время в валюте депозита цифры будут разные. Проверьте на бумаге с карандашом или в экселе постройте таблицу.:) 
avatar

  16  ssg Сообщений: 817

  • 1 декабря 2021, 19:59

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий