Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1165

 
Igor Makanu:

сомневаюсь, что сумею объяснить, если это у Вас вызывает вопрос

объект это ... ну пусть переменная типа class

в Вашем участке кода класс CProgram

где то в коде должно быть написано 

и вызывать нужно будет

Вы БОГ!!! Я Вас понял и все получилось)
 

Подскажите что это значит?

return value of 'OrderSend' should be checked    TestLibrary.mq4    64    6

 
MakarFX:

Подскажите что это значит?

return value of 'OrderSend' should be checked    TestLibrary.mq4    64    6

результат OrderSend должен быть проверен. :-)

 
Maxim Kuznetsov:

результат OrderSend должен быть проверен. :-)

Я английский знаю)))

как его проверить?

 
MakarFX:

Я английский знаю)))

как его проверить?

result=SomeOperation(....)

if (result!=ok) {

Print("Error");

}

 
Maxim Kuznetsov:

result=SomeOperation(....)

if (result!=ok) {

Print("Error");

}

Спасибо
 
//+------------------------------------------------------------------+
//|                                                     TEST_V01.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#define MAGICMA  20131111
//--- Inputs
input int    Risk = 1;
input int    Max_Risk = 8;
input int    SL   = 100;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
     if(OrdersTotal()==0)
     if(OrderSend(Symbol(), OP_BUY, Lot_Calculate(Symbol(), Risk, Max_Risk, SL), Ask, 30, NormalizeDouble(Ask - SL*Point, Digits), NormalizeDouble(Ask + SL*Point, Digits),"",MAGICMA,0,Blue)==-1)
     Print("Ошибка: ",GetLastError()); 
  }
//+------------------------------------------------------------------+
//-----------------------------------------------------------------
//                   Lot_Calculate                                |
//-----------------------------------------------------------------
  double Lot_Calculate(string _symbol, int _risk, int _m_risk, int _pips)
{
  _m_risk = Max_Risk;
  _pips+=20;
  double minlot = MarketInfo(_symbol,MODE_MINLOT);
  double maxlot = MarketInfo(_symbol,MODE_MAXLOT);
  double steplot = MarketInfo(_symbol,MODE_LOTSTEP);
  double money_risk = NormalizeDouble(AccountEquity()*_risk/100,2);
  double calk_pip_cost = NormalizeDouble(money_risk/_pips,2);  //  стоимость одного пункта
  double lot_pip_cost = MarketInfo(_symbol,MODE_TICKVALUE);  // стоимость одного пункта при изменении цены объёмом в один стандартный лот
//  while(!MathIsValidNumber(lot_pip_cost || lot_pip_cost ==0)
//{
//        lot_pip_cost = MarketInfo(_symbol,MODE_TICKVALUE); 
//} 
  double lot = calk_pip_cost/lot_pip_cost;
  
//-------------------------------------------------------------  
  double money_m_risk = NormalizeDouble(AccountEquity()*2*_risk/100,2);   // удвоение риска тоже прописал я
  double _m_calk_pip_cost = NormalizeDouble(money_m_risk/_pips,2);         // расчет стоимости одного пункта после удвоения
  double lot_m = _m_calk_pip_cost/lot_pip_cost;                                                  // расчет лота после удвоения
  
  if(lot <= minlot) lot = minlot;
  else if(lot >= maxlot) lot = maxlot;
  else if(lot > minlot && lot < maxlot)
{
  int k = int((lot - minlot)/steplot);
  lot = NormalizeDouble(minlot+k*steplot,2);
     }    
 return(lot);
// ------------------------------------------------------
{
  if(lot_m <= minlot) lot_m = minlot;                              // с этой строки моя самодеятельность
  else if(lot_m >= maxlot) lot_m = maxlot;
  else if(lot_m > minlot && lot_m < maxlot)
{
  int k = int((lot - minlot)/steplot);
  lot_m = NormalizeDouble(minlot+k*steplot,2);         
     }    
 return(lot_m);
 
         if(OrderProfit()>0) lot--;
         if(OrderProfit()<0) lot_m++;
       
     }
   if(_m_risk == Max_Risk) lot_m = lot;                        // здесь вообще хрен что поймешь
   return(0);

  }


Вот  мучаюсь уже два дня. Не могу написать функцию пересчета риска.

Задумка такая: Если сделка закрывается по ТР величину риска оставляем прежней.

Если по SL риск увеличиваем в 2 раза и так до значения прописанного во входных переменных советника скажем  Max_Risk = 8;

и далее сбрасываем на начальный риск Risk = 1;

Ну и если после удвоения сделка закрылась по ТР снова возвращаемся на начальный риск Risk = 1;

Поможете?

Заранее благодарен.

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. и снова dll и маркет День добрый! Правило №1 dll на...
 
Это же совсем не то. 
 

Добрый день!

Профи помогите. Не могу решить одну задачу. Вот код:


datetime some_time=TimeCurrent();

int start()

{

double summ;

double razn;

int k=iBarShift("",PERIOD_M5,some_time); 

double VAL0=MathAbs(iATR(NULL,0,1,1))/Point;

double VAL1=MathAbs(iATR(NULL,0,1,0))/Point;

if (VAL1>VAL0)

{

razn =MathAbs((iATR(NULL,0,1,0))-(iATR(NULL,0,1,1)))/Point;

for(int i = k; i >= 1; i--)

{

summ=summ+razn;

}

Comment("Использовано периодов: ",k,"\n",

"ATR предыдущий: "+VAL0+"\n",

"ATR текущий: ",VAL1,"\n",

"Разница ATR: ",razn,"\n",

"НАКОПЛЕНИЕ РАЗНИЦЫ: ",summ,"\n");

}

return(0);

}

Суть такая: советник считает разницу между текущим значением ATR, и предыдущим. НО! Только при повышающимся ATR. 

Эта разница отображается в переменной "razn". Мне нужно, чтобы значение переменной "razn" cуммировалось/накапливалось в переменной "summ" c приходом каждого нового бара.

В текущей версии накопление "summ" неправильно работает. 

Подозреваю дело в циклах.


Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Все предопределенные периоды графиков имеют уникальные идентификаторы. Идентификатор PERIOD_CURRENT означает текущий период графика, на котором запущена mql5-программа.
 
Добрый день участникам форума. Никак не могу найти информацию. Есть ли уже какой-либо инструмент автоматической прорисовки линий (не горизонтальные) от минимумов и максимумов до определенного уровня пунктов? Другими словами определение лоу или хай и создание линии до той свечи, на которой фиксируется дистанция от хай или лоу в пунктах? Нашел, что определением лоу и хай занимается индикатор Фрактал. Но не смог найти такую надстройку, при которой можно прорисовывать линии до точки изменения цены на определенное количество пунктов.