cardon

 
Уровень 10

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


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

Рейтинг 2089



РЕКОМЕНДУЮ




Лучшее от cardon



дороботка сова Комментариев 68
2016-11-24 13:25:33Рейтинг 0

советник на 1 МА Комментариев 13
2016-07-29 13:57:46Рейтинг 0

просто индюк Комментариев 22
2016-09-17 11:18:53Рейтинг 0

доработка сова Комментариев 2
2017-01-09 19:57:28Рейтинг 0

сова просто сова Комментариев 19
2016-10-06 16:43:18Рейтинг 0

индикатор информер

Всех с новым годом!
Просьба если будет время написать индикатор информер:
мт4 пятизнак.
1.показывает % убытка, прибыли в день от депо. значение допустим или -5,00% или +0,01%
2.если ставим стоп лосс — то показывает потенциальный риск убытка в % от депо. если ставим несколько стопов — то % убытка плюсуется.
3.выбор расположения индикатора (угол).
  • 0
  • Просмотров: 5442
  • 2 января 2016, 22:58
  • cardon
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Переделка советника
Следующая запись в группе  
доработка в советнике Cheburashka v19.1f_x
02 января 2016
04 января 2016

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

+
0
если ставим несколько стопов — то % убытка плюсуется.

Каким образом индикатор будет узнавать сколько ставим стопов?
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 3 января 2016, 14:18
+
0
а просто с 1 стопом получится реализовать потенциальный убыток?
если да, то индикатору не нужно знать сколько стопов, а просто знать потенциальный убыток -это только теория, а так я не знаю можно ли это реализовать? ведь получится очень полезная функция.
ответте можно ли реализовать с 1 стопом?
avatar

  10  cardon Автор Сообщений: 376

  • 3 января 2016, 15:08
+
0
Можно и несколько. Самый простой вариант, задать в настройках количество стопов, если лось везде одинаковый.

п.1. Считаем профит только по закрытым ордерам?
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 3 января 2016, 15:31
+
0
п.1 считаем по открытым ордерам (бегущее значение) будет видно какой получим % если мы закроем. процент остается если ордеров нет — статистика в день по %, следующий ордер плюсуется к %, на следующий день обнуляется

насчет лось одинаковый — бывает когда надо не фиксированный, а поставить за пик, то есть лось будет плавающий. также стопов может быть и более или к примеру всего 2, где мы мышкой тянем его за пик и он нам показывает потенциальный убыток в %.
Попробуйте создать с 1 ордером потенциальный убыток по стопу, если мы его таскаем мышкой по графику, можно так или нет?
Редактирован: 3 января 2016, 16:40
avatar

  10  cardon Автор Сообщений: 376

  • 3 января 2016, 16:37
+
0
Сделал часть. Работы много делаю постепенно. Сейчас считает профит за указанное количество часов если нет поз и общий профит если есть. Пока в виде советника чтобы можно было отлаживать в тестере.




//+------------------------------------------------------------------+
//|                                                     Informer.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input int Corner=0; //0-левый верхний. 1-правый верхний. 2-левый нижний. 3-правый нижний.
input int ProfitHour=24; //за сколько часов считаем профит
input color Color=Aqua; //цвет метки
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string text,int corner)
  {
   int x=140,y=40;
   if(corner==0 || corner==2) x=40;
//--- создадим текстовую метку
   ObjectDelete(0,"Info");

   if(!ObjectCreate(0,"Info",OBJ_LABEL,0,0,0))
     {
      Print(__FUNCTION__,": не удалось создать текстовую метку! Код ошибки = ",GetLastError());
     }

//--- установим координаты метки
   ObjectSetInteger(0,"Info",OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,"Info",OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"Info",OBJPROP_CORNER,corner);
//--- установим текст
   ObjectSetString(0,"Info",OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,"Info",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"Info",OBJPROP_FONTSIZE,14);
//--- установим цвет
   ObjectSetInteger(0,"Info",OBJPROP_COLOR,Color);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CurrencyProfitFromDate(datetime t=0)
  {
   double pr=0;

   for(int i=0; i<OrdersHistoryTotal()-1; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if((OrderSymbol()==Symbol()))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime())
                 {
                  pr+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CurrencyProfit()
  {
   double pr=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==Symbol()))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(IsTesting() && OrdersTotal()<1)
     {
      int r=OrderSend(NULL,0,0.1,Ask,5,Ask-200*Point,Ask+200*Point,"",0,0,Blue);
     }
   double BALANCE=AccountInfoDouble(ACCOUNT_BALANCE);
   if(OrdersTotal()<1) PutLabel("Profit: "+DoubleToString(CurrencyProfitFromDate(TimeCurrent()-ProfitHour*60*60)*100/BALANCE,2)+"%",Corner);
   else PutLabel("Profit: "+DoubleToString(CurrencyProfit()*100/BALANCE,2)+"%",Corner);
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 3 января 2016, 17:13
+
0
После 9.00 показывает профит ордера и риск с 0-9 профит за указанное время:





//+------------------------------------------------------------------+
//|                                                     Informer.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input int Corner=0; //0-левый верхний. 1-правый верхний. 2-левый нижний. 3-правый нижний.
input int ProfitHour=24; //за сколько часов считаем профит
input color Color=Aqua; //цвет метки
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string text,int corner)
  {
   int x=140,y=40;
   if(corner==0 || corner==2) x=40;
//--- создадим текстовую метку
   ObjectDelete(0,"Info");
   ObjectDelete(0,"Stop");

   if(!ObjectCreate(0,"Info",OBJ_LABEL,0,0,0))
     {
      Print(__FUNCTION__,": не удалось создать текстовую метку! Код ошибки = ",GetLastError());
     }

//--- установим координаты метки
   ObjectSetInteger(0,"Info",OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,"Info",OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"Info",OBJPROP_CORNER,corner);
//--- установим текст
   ObjectSetString(0,"Info",OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,"Info",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"Info",OBJPROP_FONTSIZE,14);
//--- установим цвет
   ObjectSetInteger(0,"Info",OBJPROP_COLOR,Color);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutRiskLabel(string text,int corner)
  {
   int x=140,y=60;
   if(corner==0 || corner==2) x=40;
//--- создадим текстовую метку
   ObjectDelete(0,"Stop");

   if(!ObjectCreate(0,"Stop",OBJ_LABEL,0,0,0))
     {
      Print(__FUNCTION__,": не удалось создать текстовую метку! Код ошибки = ",GetLastError());
     }

//--- установим координаты метки
   ObjectSetInteger(0,"Stop",OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,"Stop",OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"Stop",OBJPROP_CORNER,corner);
//--- установим текст
   ObjectSetString(0,"Stop",OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,"Stop",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"Stop",OBJPROP_FONTSIZE,14);
//--- установим цвет
   ObjectSetInteger(0,"Stop",OBJPROP_COLOR,Color);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CurrencyProfitFromDate(datetime t=0)
  {
   double pr=0;

   for(int i=0; i<OrdersHistoryTotal()-1; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if((OrderSymbol()==Symbol()))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime())
                 {
                  pr+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CurrencyProfit()
  {
   double pr=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==Symbol()))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Risk()
  {
   double s=0,p=0,l=0;
   double b=AccountInfoDouble(ACCOUNT_BALANCE);
   
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==Symbol()))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               s=MathAbs((OrderOpenPrice()-OrderStopLoss())/Point);
               l=OrderLots();
              }
           }
        }
     }
   p=100*s*l/b;  
   return(p);
  }  
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double BALANCE=AccountInfoDouble(ACCOUNT_BALANCE);
     
   if(IsTesting() && OrdersTotal()<1 && Hour()>=9)
     {
      int r=OrderSend(NULL,0,1,Ask,5,Ask-200*Point,Ask+200*Point,"",0,0,Blue);
     }
   
   if(OrdersTotal()<1) PutLabel("Profit: "+DoubleToString(CurrencyProfitFromDate(TimeCurrent()-ProfitHour*60*60)*100/BALANCE,2)+"%",Corner);
   else 
     {     
      PutLabel("Profit: "+DoubleToString(CurrencyProfit()*100/BALANCE,2)+"%",Corner);
      PutRiskLabel("Risk:   "+DoubleToString(Risk(),2)+"%",Corner);
     }
  }
//+------------------------------------------------------------------+


Редактирован: 3 января 2016, 18:25
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 3 января 2016, 18:19
+
0
вопрос — что такое «После 9.00 показывает профит ордера и риск с 0-9 профит»? что такое 9.00? и риск с 0-9 профит, как понять?:) 
avatar

  10  cardon Автор Сообщений: 376

  • 4 января 2016, 00:08
+
0
вопрос — что такое «После 9.00 показывает профит ордера и риск с 0-9 профит»? что такое 9.00? и риск с 0-9 профит, как понять?


Это для демонстрации работы советника в тестере.
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 4 января 2016, 00:10
+
0
наконец то я проверил, как я понял, он работает с одним ордером?
можно прикрутить чтоб он считал несколько стопов? ну чтоб риск % приплюсовывался? если нет, то есть в запасе еще вариант.
avatar

  10  cardon Автор Сообщений: 376

  • 4 января 2016, 09:51
+
0
Сейчас для теста 3 ордера. Считает: www.opentraders.ru/downloads/995/


Редактирован: 4 января 2016, 18:33
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 4 января 2016, 18:29
+
0
а он сможет считать с нескольких пар? понимаю это будет уже не индикатор, а советник, но все же было бы хорошо, чтобы считал со всех пар, где открыты ордера.
avatar

  10  cardon Автор Сообщений: 376

  • 4 января 2016, 19:05
+
0
а он сможет считать с нескольких пар? понимаю это будет уже не индикатор, а советник, но все же было бы хорошо, чтобы считал со всех пар, где открыты ордера.


Обычно программисты работают по заранее утвержденному ТЗ, что не было: а может так, а еще вот так, а теперь давайте вот это попробуем :D 
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 4 января 2016, 19:48
+
0
блин я упустил этот момент, только понял. это не давайте попробуем, это упущенный момент, у меня вылетело из головы, думал он по умолчанию будет считать со всех пар, а когда увидел тестовые работы, то понял, что он считает с одной пары.
avatar

  10  cardon Автор Сообщений: 376

  • 4 января 2016, 20:05
+
0
Через часок приду, поправлю.
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 4 января 2016, 21:07
+
0
Я закометарил контроль по символу. Посмотрите:


//+------------------------------------------------------------------+
//|                                                     Informer.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input int Corner=0; //0-левый верхний. 1-правый верхний. 2-левый нижний. 3-правый нижний.
input int ProfitHour=24; //за сколько часов считаем профит
input color Color=Aqua; //цвет метки
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string text,int corner)
  {
   int x=140,y=40;
   if(corner==0 || corner==2) x=40;
//--- создадим текстовую метку
   ObjectDelete(0,"Info");
   ObjectDelete(0,"Stop");

   if(!ObjectCreate(0,"Info",OBJ_LABEL,0,0,0))
     {
      Print(__FUNCTION__,": не удалось создать текстовую метку! Код ошибки = ",GetLastError());
     }

//--- установим координаты метки
   ObjectSetInteger(0,"Info",OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,"Info",OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"Info",OBJPROP_CORNER,corner);
//--- установим текст
   ObjectSetString(0,"Info",OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,"Info",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"Info",OBJPROP_FONTSIZE,14);
//--- установим цвет
   ObjectSetInteger(0,"Info",OBJPROP_COLOR,Color);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutRiskLabel(string text,int corner)
  {
   int x=140,y=60;
   if(corner==0 || corner==2) x=40;
//--- создадим текстовую метку
   ObjectDelete(0,"Stop");

   if(!ObjectCreate(0,"Stop",OBJ_LABEL,0,0,0))
     {
      Print(__FUNCTION__,": не удалось создать текстовую метку! Код ошибки = ",GetLastError());
     }

//--- установим координаты метки
   ObjectSetInteger(0,"Stop",OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,"Stop",OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"Stop",OBJPROP_CORNER,corner);
//--- установим текст
   ObjectSetString(0,"Stop",OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,"Stop",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"Stop",OBJPROP_FONTSIZE,14);
//--- установим цвет
   ObjectSetInteger(0,"Stop",OBJPROP_COLOR,Color);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CurrencyProfitFromDate(datetime t=0)
  {
   double pr=0;

   for(int i=0; i<OrdersHistoryTotal()-1; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         //if((OrderSymbol()==Symbol()))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime())
                 {
                  pr+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CurrencyProfit()
  {
   double pr=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //if((OrderSymbol()==Symbol()))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Risk()
  {
   double s=0,p=0,l=0;
   double b=AccountInfoDouble(ACCOUNT_BALANCE);
   
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //if((OrderSymbol()==Symbol()))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               s+=MathAbs((OrderOpenPrice()-OrderStopLoss())/Point);
               l+=OrderLots();
              }
           }
        }
     }
   p=100*s*l/b/OrdersTotal();  
   return(p);
  }  
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double BALANCE=AccountInfoDouble(ACCOUNT_BALANCE);
     
   if(IsTesting() && OrdersTotal()<1 && Hour()>=9)
     {
      int r=OrderSend(NULL,0,1,Ask,5,Ask-200*Point,Ask+200*Point,"",0,0,Blue);
      r=OrderSend(NULL,0,1,Ask,5,Ask-200*Point,Ask+200*Point,"",0,0,Blue);
      r=OrderSend(NULL,0,1,Ask,5,Ask-200*Point,Ask+200*Point,"",0,0,Blue);
     }
   
   if(OrdersTotal()<1) PutLabel("Profit: "+DoubleToString(CurrencyProfitFromDate(TimeCurrent()-ProfitHour*60*60)*100/BALANCE,2)+"%",Corner);
   else 
     {     
      PutLabel("Profit: "+DoubleToString(CurrencyProfit()*100/BALANCE,2)+"%",Corner);
      PutRiskLabel("Risk:   "+DoubleToString(Risk(),2)+"%",Corner);
     }
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 4 января 2016, 22:19
+
0
протестил, получилось хорошо, но есть недочеты, сразу извиняюсь за много скринов

не открыт не 1 ордер — имеем определенное значение за 24 часа


открываем ордер по голде получаем такое

выставляю стоп получаем сразу такое — профит сразу меняется


переключаюсь на евро — вижу такую картину риск 3021% (ордер открыт на золоте, на других парах все нормально)


далее такой пример — не открыто ордеров, имеем убыток -0,43%


открываю ордер — профит сразу становится -0,18%


отменяю ордер и получаю снова другое число ну с учетом спреда -0,61% (было -0,43 + спред = -0,61%)


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

avatar

  10  cardon Автор Сообщений: 376

  • 5 января 2016, 00:03
комментарий был удален 2016-01-05 00:07:35 cardon

комментарий был удален 2016-01-05 00:08:16 cardon

+
0
Написать это одно а отладка занимает времени в разы больше. Буду заниматься отладкой с учетом ваших замечаний.
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 5 января 2016, 00:08
+
0
и еще пример
имеем профит +1,23% то есть если я закрою ордер я должен получить значение +1,23%


а получаю после закрытия значение -0,78%
avatar

  10  cardon Автор Сообщений: 376

  • 5 января 2016, 00:16
+
0
Поехали по порядку:

не открыт не 1 ордер — имеем определенное значение за 24 часа


Нет ордеров за сутки. Показывает правильно.



открываем ордер по голде получаем такое

Сделал риск выводим если стоп больше 0.

далее такой пример — не открыто ордеров, имеем убыток -0,43%


Когда не открыты ордера считается за 24 часа.

открываю ордер — профит сразу становится -0,18%


Когда ордер есть профит считается с открытой позы.

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


Осталось посмотреть только этот вопрос когда рынок будет открыт. На остальные ответ выше.
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 5 января 2016, 01:52
+
0

//+------------------------------------------------------------------+
//|                                                     Informer.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input int Corner=0; //0-левый верхний. 1-правый верхний. 2-левый нижний. 3-правый нижний.
input int ProfitHour=24; //за сколько часов считаем профит
input color Color=Aqua; //цвет метки
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string text,int corner)
  {
   int x=140,y=40;
   if(corner==0 || corner==2) x=40;
//--- создадим текстовую метку
   ObjectDelete(0,"Info");
   ObjectDelete(0,"Stop");

   if(!ObjectCreate(0,"Info",OBJ_LABEL,0,0,0))
     {
      Print(__FUNCTION__,": не удалось создать текстовую метку! Код ошибки = ",GetLastError());
     }

//--- установим координаты метки
   ObjectSetInteger(0,"Info",OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,"Info",OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"Info",OBJPROP_CORNER,corner);
//--- установим текст
   ObjectSetString(0,"Info",OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,"Info",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"Info",OBJPROP_FONTSIZE,14);
//--- установим цвет
   ObjectSetInteger(0,"Info",OBJPROP_COLOR,Color);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutRiskLabel(string text,int corner)
  {
   int x=140,y=60;
   if(corner==0 || corner==2) x=40;
//--- создадим текстовую метку
   ObjectDelete(0,"Stop");

   if(!ObjectCreate(0,"Stop",OBJ_LABEL,0,0,0))
     {
      Print(__FUNCTION__,": не удалось создать текстовую метку! Код ошибки = ",GetLastError());
     }

//--- установим координаты метки
   ObjectSetInteger(0,"Stop",OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,"Stop",OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"Stop",OBJPROP_CORNER,corner);
//--- установим текст
   ObjectSetString(0,"Stop",OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,"Stop",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"Stop",OBJPROP_FONTSIZE,14);
//--- установим цвет
   ObjectSetInteger(0,"Stop",OBJPROP_COLOR,Color);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CurrencyProfitFromDate(datetime t=0)
  {
   double pr=0;

   for(int i=0; i<OrdersHistoryTotal()-1; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         //if((OrderSymbol()==Symbol()))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime())
                 {
                  pr+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CurrencyProfit()
  {
   double pr=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //if((OrderSymbol()==Symbol()))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Risk()
  {
   double s=0,p=0,l=0;
   double b=AccountInfoDouble(ACCOUNT_BALANCE);

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderStopLoss()>0)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               s+=MathAbs((OrderOpenPrice()-OrderStopLoss())/Point);
               l+=OrderLots();
              }
           }
        }
     }
   p=100*s*l/b/OrdersTotal();
   return(p);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int r=0;
   double BALANCE=AccountInfoDouble(ACCOUNT_BALANCE);

   if(IsTesting() && OrdersTotal()<1 && Hour()>=9)
     {
      r=OrderSend(NULL,0,1,Ask,5,Ask-200*Point,Ask+200*Point,"",0,0,Blue);
      r=OrderSend(NULL,0,1,Ask,5,Ask-200*Point,Ask+200*Point,"",0,0,Blue);
      r=OrderSend(NULL,0,1,Ask,5,Ask-200*Point,Ask+200*Point,"",0,0,Blue);
     }

   //if(OrdersTotal()<1) r=OrderSend(NULL,0,1,Ask,5,Ask-200*Point,Ask+200*Point,"",0,0,Blue);

      if(OrdersTotal()<1) PutLabel("Profit: "+DoubleToString(CurrencyProfitFromDate(TimeCurrent()-ProfitHour*60*60)*100/BALANCE,2)+"%",Corner);
   else
     {
      PutLabel("Profit: "+DoubleToString(CurrencyProfit()*100/BALANCE,2)+"%",Corner);
      PutRiskLabel("Risk:   "+DoubleToString(Risk(),2)+"%",Corner);
     }
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 5 января 2016, 01:53
+
0
если открыться по золоту и посмотреть на другой паре, то значения будут разные.


Одинаковые.



avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 5 января 2016, 03:34
+
0
протестировал еще раз на двух разных терминалах
получилось такое, это другой терминал и этаже ошибка по золоту, вы на скрине выше показываете без стопа, но стоит выставить стоп, как получаем такое.


также открыв на другом терминале на евро и других парах не показывает риск на золоте.


также было замечено, что профит показывает с прибыли


закрыв ордер я получаю профит -0,27% хотя судя по депо должно было 9,98%


нужно чтоб профит показывал не с текучего ордера, а с текучего депо. (средства)

Редактирован: 5 января 2016, 12:38
avatar

  10  cardon Автор Сообщений: 376

  • 5 января 2016, 12:06
+
0
может быть этот индикатор натолкнет на верный код профита за день.
в индикаторе много лишнего, нам нужно только % за сегодня и может быть текущая прибыль, считает со всех пар, если будете использовать этот код, то можно добавить и профит за неделю в %


если мы закрываем ордер то индикатор обнуляет прибыль как на скрине, а профит приплюсует на профит за день — в нашем случае было -2,53% и при закрытии ордера получили -2,99%


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

1.текущий профит %
2.профит за день %
3.профит за неделю %
4.риск %

не могу вставить код индикатора, пишет код большой, кидаю ссылку на него:
s3.amazonaws.com/tradelikeapro-blog-files/indicators/i-ProfitLot.rar
Редактирован: 5 января 2016, 15:37
avatar

  10  cardon Автор Сообщений: 376

  • 5 января 2016, 15:33
+
0
Давайте ссылку а то с нуля долго.
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 5 января 2016, 15:36
+
0
avatar

  10  cardon Автор Сообщений: 376

  • 5 января 2016, 15:38
+
0
Убрал лишнее: www.opentraders.ru/downloads/997/

avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 5 января 2016, 16:14
+
0
хорошо
теперь убрать все и оставить только %, лоты и пункты и так видно в терминале, они не нужны, тем самым мы освободим место, будет акуратно и комфортно.
добавить недельку и прикрутить риск по стопу в %, который вы уже написали. на скрин добавил редактором, как примерно будет выглядеть.


Редактирован: 5 января 2016, 18:44
avatar

  10  cardon Автор Сообщений: 376

  • 5 января 2016, 18:42
+
0
Переписал я кимовский индикатор: www.opentraders.ru/downloads/997/

avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 6 января 2016, 01:39
+
0
отлично, все то что нужно *bravo*  спасибо за понимание и терпение. ушел на обкатку.

для тех кто будет его юзать, его можно двигать в настройках и менять шрифт:

avatar

  10  cardon Автор Сообщений: 376

  • 6 января 2016, 11:40
+
0
здравствуйте решил поставить точку на индикаторе.
нужны кое какие исправления.
для полноты индикаторы нужно добавить «прибыль за месяц %» после прибыли за неделю.

теперь на счет риска по стопам — считает он все правильно, но если перевести 1 ордер в БУ, то он считает отрицательное значение + положительное и выводит его в риск % и получается неверный процент. С 1 ордером понять можно там если в БУ, то он покажет риск в % число, то можно прикинуть, что это положительное, а вот с несколькими ордерами — беда.

вот скрин где все нормально, пока у нас нет БУ, риск показывает верно.


этот скрин, где мы перевели один ордер в БУ и риск приплюсовывался к БУ и получили неверное значение.


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

  10  cardon Автор Сообщений: 376

  • 11 января 2016, 12:08
+
0
про меня не забыли?)):) 
avatar

  10  cardon Автор Сообщений: 376

  • 12 января 2016, 20:41
+
0
Работы много, если забываю напоминайте, как только выкрою свободное время буду смотреть.
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 12 января 2016, 20:59
+
+1
Прибыль за месяц добавил: www.opentraders.ru/downloads/997

avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 12 января 2016, 21:46
+
0
Приветствую, еще одна просьба добавить после прибыли за месяц, прибыль за все время, между строчками месяц и риск на стоп, между ними.
avatar

  10  cardon Автор Сообщений: 376

  • 20 июля 2016, 16:37

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