Скачать MetaTrader 5

Помогите новичку.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй программу в Маркете и продавай ее миллионам трейдеров!
Your_Lord
22
Your_Lord 2016.01.19 13:36 

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

пробовал balance = ACCOUNT_BALANCE/100000/ptl

где ptl просто коэффициент. Через отладку всегда 0 считает.

2) Как обрабатывать события в OnTick() с интервалом каждые 10 минут? ибо у меня там ветвление, и проверка происходит каждый тик, а мне надо раз в 10 минут. Спасибо 

Sergey Gritsay
6471
Sergey Gritsay 2016.01.19 14:27  

Вот вариант процент от депозита, точнее от свободных средств

double LotVolume()
  {
   double lot=(AccountFreeMargin()*Risk)/(MarketInfo(_Symbol,MODE_MARGINREQUIRED)*100.0);
   if(lot < MarketInfo(_Symbol,MODE_MINLOT))lot = MarketInfo(_Symbol,MODE_MINLOT);
   if(lot > MarketInfo(_Symbol,MODE_MAXLOT))lot = MarketInfo(_Symbol,MODE_MAXLOT);
   lot=NormalizeDouble(lot,VolumeDigits());
   return(lot);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int VolumeDigits()
  {
   double LotsStep=MarketInfo(_Symbol,MODE_LOTSTEP);
   if(LotsStep==0.01)return(2);
   if(LotsStep==0.1)return(1);
   return(0);
  }
Your_Lord
22
Your_Lord 2016.01.19 14:40  
Sergey Gritsay:

Вот вариант процент от депозита, точнее от свободных средств

Спасибо большое, с этим уже разобрался, но ваш код тоже стоит изучить.

Теперь актуален 2 вопрос, возможно я его даже не правильно сформулировал, каким алгоритмом можно заставить совершаться сделки именно раз в 10 минут. 

Sergey Gritsay
6471
Sergey Gritsay 2016.01.19 15:03  
С помощью события полученных от таймера. только если я не ошибаюсь функция таймера в тестере не работает.
//+------------------------------------------------------------------+
//|                                                         тест.mq4 |
//|                                                   Sergey Gritsay |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);// в скобках количество секунд
      
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
      
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
    // тут пишем свой алгоритм 
  }
//+------------------------------------------------------------------+
Dmitry Fedoseev
42905
Dmitry Fedoseev 2016.01.20 02:45  
Your_Lord:

...

2) Как обрабатывать события в OnTick() с интервалом каждые 10 минут? ибо у меня там ветвление, и проверка происходит каждый тик, а мне надо раз в 10 минут. Спасибо 

В конце функции запоминать в статическую переменную время последнего выполнения функции. Перед выполнением функции проверить его, если прошло меньше 10-ти секунд, то return.

Tema97
155
Tema97 2016.01.21 19:37  

Пацаны здорова всем ) подскажите пожалуйста - нужно код написать - не могу сообразить как его записать 

- нужен ордер селект  который в истории - суть такая мол если последний ордер закрылся отрицательным значением то мы делаем то  то  >.....

Подскажите кто знает плиз)

Зарание спасибо )  

Vasyl Nosal
18548
Vasyl Nosal 2016.01.21 21:23  
Dmitry Fedoseev:

В конце функции запоминать в статическую переменную время последнего выполнения функции. Перед выполнением функции проверить его, если прошло меньше 10-ти секунд, то return.

Лучше OnTimer
Vasyl Nosal
18548
Vasyl Nosal 2016.01.21 21:24  
Tema97:

Пацаны здорова всем ) подскажите пожалуйста - нужно код написать - не могу сообразить как его записать 

- нужен ордер селект  который в истории - суть такая мол если последний ордер закрылся отрицательным значением то мы делаем то  то  >.....

Подскажите кто знает плиз)

Зарание спасибо )  

Делай цыкл перебора исторических ордеров с конца.

Как только найдёшь один, делай тото и break; 

Yury Reshetov
13460
Yury Reshetov 2016.01.23 16:18  
Tema97:

Пацаны здорова всем ) подскажите пожалуйста - нужно код написать - не могу сообразить как его записать 

- нужен ордер селект  который в истории - суть такая мол если последний ордер закрылся отрицательным значением то мы делаем то  то  >.....

Подскажите кто знает плиз)

Зарание спасибо )  

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

Vasyl Nosal:

Делай цыкл перебора исторических ордеров с конца.

Как только найдёшь один, делай тото и break;

К сожалению, такой "метод" не всегда корректно работает. Т.е. ордера не всегда упорядочены по времени в истории.
Alexander Ivanov
12606
Alexander Ivanov 2016.01.23 17:15  
Tema97:

Пацаны здорова всем ) подскажите пожалуйста - нужно код написать - не могу сообразить как его записать 

- нужен ордер селект  который в истории - суть такая мол если последний ордер закрылся отрицательным значением то мы делаем то  то  >.....

Подскажите кто знает плиз)

Зарание спасибо )  

int i=OrdersHistoryTotal()-1;
        while(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         {
         if(OrderSymbol()==Symbol())
          {
           if(OrderProfit()<0)  ..................................;
         
         
           if(OrderProfit()>0) ..................................;
              
          break;
          }     
         i--;
Sergey Chalyshev
4511
Sergey Chalyshev 2016.01.23 19:11  
Tema97:

Пацаны здорова всем ) подскажите пожалуйста - нужно код написать - не могу сообразить как его записать 

- нужен ордер селект  который в истории - суть такая мол если последний ордер закрылся отрицательным значением то мы делаем то  то  >.....

Подскажите кто знает плиз)

Зарание спасибо )  

О!, канкретные пацаны собрались, можно я с вами потусуюсь?)

Vasyl Nosal,  Yury ReshetovAlexander Ivanov,

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