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

 
MakarFX #:

Даа, намусорил)

Теперь в каждой папке, по очереди, переименуй папки Experts в _Experts и Indicators в _Indicators.

Переименовал в одной папке - запустил терминал, если не помогло - переименовал назад и переходи к следующей папке.

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

Макар!

Событие произошло сегодня. Поэтому папки со старыми датами не стал трогать. 

А внесение изменений в свежие папки ничего не изменило.

Тогда я взял и перетащил профили, индикаторы и эксперты в другой терминал. И закончил эту бодягу.

Сейчас все работает. На другом терминале, правда. Но ведь важен результат - можно работать.

А тот терминал потом удалю.

Полагаю, что ваше предложение найти свои индикаторы и профили через обращение к редактору - просто великолепно! 

Особенно таким "чайникам" в программировании, вроде меня.

Спасибо большое вам за помощь и отзывчивость!

Удачи!

С уважением!

 

Всем привет. Только начинаю во всем разбираться по этому говорю сразу что я зеленей зеленого. Не знаю на сколько меня хватит но какой то опыт получу.  Подскажите может кто сталкивался с такой ситуацией. нужен типа скрипт ну или код который следит что в ближайших например 10 пунктах вниз и вверх нет открытых сел и бай.

    1.....Например поступил тик -  код смотрит что в ближайших 10 пунктах вниз и (или) вверх ордера сел нет- то установить ордер сел.  Если есть то ничего. Тоже с ордером бай

Вот примерная схема в Forex EA Generator

   


Файлы:
hktrabmcw4.jpg  222 kb
 
valentin104 #:

Всем привет. Только начинаю во всем разбираться по этому говорю сразу что я зеленей зеленого. Не знаю на сколько меня хватит но какой то опыт получу.  Подскажите может кто сталкивался с такой ситуацией. нужен типа скрипт ну или код который следит что в ближайших например 10 пунктах вниз и вверх нет открытых сел и бай.

    1.....Например поступил тик -  код смотрит что в ближайших 10 пунктах вниз и (или) вверх ордера сел нет- то установить ордер сел.  Если есть то ничего. Тоже с ордером бай

Вот примерная схема в Forex EA Generator

   


Идиотская схема.

 
Artyom Trishkin #:

Идиотская схема.

Нет, она такой выглядит без if и else.) Но я не об этом хотел.

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)

В скрипте выдает  tick_s =1.0 tick_vflue =80.32786885245902, а в сове  tick_value =80.37529660186777 tick_size =1e-05

Счеты ломаются.




 
Artyom Trishkin #:

Идиотская схема.

Ты упустил суть

valentin104 #:

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

 
Galim_V #:

Нет, она такой выглядит без if и else.) Но я не об этом хотел.

В скрипте выдает  tick_s =1.0 tick_vflue =80.32786885245902, а в сове  tick_value =80.37529660186777 tick_size =1e-05

Счеты ломаются.




tick_size =1e-05

Нормализуй DoubleToString( tick_size ,2)

 
MakarFX #:

tick_size =1e-05

Нормализуй DoubleToString( tick_size ,2)

Нули одни. Даже сотых не нашел.

//+------------------------------------------------------------------+
//|                                                     MAX+risk.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
#property script_show_inputs
enum Mani
  {
   free_margin,
   balans
  };
input Mani risk_mani;
input double Lot=0.0;
input int max_risk =0; //В% от свободных средсв или...
input int stoploss=300;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double Lots=0;
   int    Max_Risk=0;

   printf("ACCOUNT_MARGIN_FREE =  %G",AccountInfoDouble(ACCOUNT_MARGIN_FREE)); //Размер свободных средств на счете  в валюте
   printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE)); //Баланс счета в валюте депозита
   printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));    // Уровень залоговых средств в %

   double freemani=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   double balance=AccountInfoDouble(ACCOUNT_BALANCE);
   double tick_s =  SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)/_Point;  //Минимальное изменение цены
   double tick_value= SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE);//Размер минимального изменения цены инструмента в валюте депозита
   if(risk_mani==balans)
     {
      if(max_risk>0&&stoploss>0)
        {
         double tmp= balance*max_risk/100/(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE));
         Lots=NormalizeDouble(tmp,2);
         printf(" Чтобы max_risk был не более %f%s%d%s%f",max_risk," в % от ACCOUNT_BALANCE при stoploss =",stoploss,",неоходим Lots =",Lots);
        }
      if(Lot>0)
        {
         Max_Risk= (int)MathRound(Lot*(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE))/balance*100);
         printf(" Max_Risk при Lot=%f%s%d,%s%d%s",Lot," и stoploss =",stoploss," будет =",Max_Risk,"%");
        }
     }
   if(risk_mani==free_margin)
     {
      if(max_risk>0&&stoploss>0)
        {
         double tmp= freemani*max_risk/100/(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE));
         Lots=NormalizeDouble(tmp,2);
         printf(" Чтобы max_risk был не более %f%s%d%s%f",max_risk," в % от ACCOUNT_MARGIN_FREE при stoploss =",stoploss,",неоходим Lots =",Lots);
        }
      if(Lot>0)
        {
         Max_Risk= (int)MathRound(Lot*(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE))/freemani*100);
         printf(" Max_Risk при Lot=%f%s%d,%s%d%s",Lot," и stoploss =",stoploss," будет =",Max_Risk,"%");
        }
     }
   Print("Lots =",Lots," Max_Risk =",Max_Risk," tick_s =",tick_s," tick_vflue =",tick_value);
  }
//+------------------------------------------------------------------+

Здесь работает. В сове, переменные вместо функций. Но уже изначально функция выдает лабуду в OnTick(). 

 
Galim_V #:

Нули одни. Даже сотых не нашел.

Здесь работает. В сове, переменные вместо функций. Но уже изначально функция выдает лабуду в OnTick(). 

Нашел. Извиняюсь. Значение    tick_size =1e-05  равно 0.00001 и оно правильное.

 
valentin104 #:

говорю сразу что я зеленей зеленого. Не знаю на сколько меня хватит


С таким подходом к изучению программирования лучше нанять программиста и не париться.

 

Есть индикатор ZigZag из стандартной поставки и у него стиль отрисовки линии DRAW_SECTION, т.е. большая часть значений в индикаторном буфере равна EMPTY_VALUE и только иногда там появляются отличные от этой величины значения (точки перелома), по которым и строится линия. Полагаю, что каждый хотя бы раз в жизни видел этот индикатор и(ли) его код.

Стоит задача получить значение, соответствующее последней точке перелома, т.е. самое позднее значение индикаторного буфера, не равное EMPTY_VALUE.

Внимание, вопрос: является ли верным подходом перебирать в цикле значения буфера индикатора, начиная с нулевого сдвига вглубь, на каждой итерации вызывая функцию iCustom, до тех пор, пока полученное значение не станет отлично от EMPTY_VALUE?

Или есть какой-то более простой способ получить это значение? 

Причина обращения: