[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 680

 
boris.45:
Как к Вам зайти? У меня много вопросов, хотелось бы проконсультироваться.
Вы когда задаёте вопрос кому-либо, щёлкайте по надписи "ответить" в правом нижнем углу сообщения того человека, к которому вы обращаетесь. Иначе долго люди будут гадать к кому адресован ваш вопрос... :)
 
Подскажите, можно ли из скрипта послать советнику команду на отключение?
 
granit77:
Я бы свитч заменил готовым массивом, чего присваивать каждый раз предопределенные значения?

Спасибо, а по-подробнее можно? Ведь предопределёнными значениями здесь являются таймфреймы, но код, следующий за кейсами для разных индикаторов будет другим... Наверное проще выложить чуть больше кода... :) Вообще сегодня я очень туго соображаю - не смог ночью уснуть и до сей поры в подвешенном состоянии...

int AnaliseFunc (string sy, int tf)
{
   
   CurAsk   =MarketInfo(Symbol(),MODE_ASK);
   CurBid   =MarketInfo(Symbol(),MODE_BID);
   OpnPrice =iOpen(NULL,PERIOD_M5,0);
   OpnPrice1=iOpen(NULL,PERIOD_M5,1);
   ClsPrice1=iClose(NULL,PERIOD_M5,1);
         
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB_1  =iCustom(sy,tf,"BB_MA",13,1,1,1),
   BB_2  =iCustom(sy,tf,"BB_MA",13,1,1,2),
   BB_3  =iCustom(sy,tf,"BB_MA",13,1,1,3),
   AO1   =iAO(sy,tf,1),
   AO2   =iAO(sy,tf,2),
   AO3   =iAO(sy,tf,3),
   AC1   =NormalizeDouble(iAC(sy,tf,1),8)*1000,
   AC2   =NormalizeDouble(iAC(sy,tf,2),8)*1000,
   AC3   =NormalizeDouble(iAC(sy,tf,3),8)*1000,
   AC4   =NormalizeDouble(iAC(sy,tf,4),8)*1000,
   AC5   =NormalizeDouble(iAC(sy,tf,5),8)*1000,
   SpMan1=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,1),
   SpMan2=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,2),
   DeM_1 =iDeMarker(sy,tf,14,1),
   DeM_2 =iDeMarker(sy,tf,14,2),
   Mom_1 =iMomentum(sy,tf,14,PRICE_CLOSE,1),
   Mom_2 =iMomentum(sy,tf,14,PRICE_CLOSE,2),
   Mom_3 =iMomentum(sy,tf,14,PRICE_CLOSE,3);
   
//---------------- Проверка на разворот BB_MA -------------------------------------------------------   
   
   if (BB_1>BB_2 && BB_2<=BB_3 && BB_1<0)                               // Найден разворот BB вверх
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =true;  TrBBTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrBBTurnUP_M5 =true;  TrBBTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrBBTurnUP_M15=true;  TrBBTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrBBTurnUP_M30=true;  TrBBTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrBBTurnUP_H1 =true;  TrBBTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrBBTurnUP_H4 =true;  TrBBTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrBBTurnUP_D1 =true;  TrBBTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrBBTurnUP_W1 =true;  TrBBTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrBBTurnUP_MN =true;  TrBBTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
   if (BB_1<BB_2 && BB_2>=BB_3 && BB_1>0)                               // Найден разворот BB вниз
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =false;  TrBBTurnDN_M1=true;      // Флаг разворота вниз на М1
            case 5:     TrBBTurnUP_M5 =false;  TrBBTurnDN_M5=true;      // Флаг разворота вниз на М5
            case 15:    TrBBTurnUP_M15=false;  TrBBTurnDN_M15=true;     // Флаг разворота вниз на М15 
            case 30:    TrBBTurnUP_M30=false;  TrBBTurnDN_M30=true;     // Флаг разворота вниз на М30 
            case 60:    TrBBTurnUP_H1 =false;  TrBBTurnDN_H1=true;      // Флаг разворота вниз на H1
            case 240:   TrBBTurnUP_H4 =false;  TrBBTurnDN_H4=true;      // Флаг разворота вниз на H4
            case 1440:  TrBBTurnUP_D1 =false;  TrBBTurnDN_D1=true;      // Флаг разворота вниз на D1
            case 10080: TrBBTurnUP_W1 =false;  TrBBTurnDN_W1=true;      // Флаг разворота вниз на W1
            case 43200: TrBBTurnUP_MN =false;  TrBBTurnDN_MN=true;      // Флаг разворота вниз на MN
         }
      }
//---------------------- Проверка на разворот Momentum -----------------------------------------------
   
   if (Mom_1>Mom_2 && Mom_2<=Mom_3 && Mom_1<100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =true;  TrMomTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =true;  TrMomTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=true;  TrMomTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=true;  TrMomTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =true;  TrMomTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =true;  TrMomTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =true;  TrMomTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =true;  TrMomTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =true;  TrMomTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
      
   if (Mom_1<Mom_2 && Mom_2>=Mom_3 && Mom_1>100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =false;  TrMomTurnDN_M1=true;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =false;  TrMomTurnDN_M5=true;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=false;  TrMomTurnDN_M15=true;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=false;  TrMomTurnDN_M30=true;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =false;  TrMomTurnDN_H1=true;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =false;  TrMomTurnDN_H4=true;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =false;  TrMomTurnDN_D1=true;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =false;  TrMomTurnDN_W1=true;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =false;  TrMomTurnDN_MN=true;      // Флаг разворота вверх на MN
         }
      }
//---------------------- Проверка DeMarker на перепроданность/перекупленность ---------
Видите - там и дальше идёт абсолютно идентичный код, но уже выполняются проверки торговых критериев других индюкаторов... Просто есть желание запихнуть все проверки всех индюков, кот. используются в советнике, в один аналитический блок, чтобы он единожды за тик рассчитывал их значения, заносил их в переменные, а далее уже использовать значения самих переменных для принятия торговых решений. Вот как это организовать с пом-ю массива предопределённых значений не соображу...
 
artmedia70:

Спасибо, а по-подробнее можно? Ведь предопределёнными значениями здесь являются таймфреймы, но код, следующий за кейсами для разных индикаторов будет другим... Наверное проще выложить чуть больше кода... :) Вообще сегодня я очень туго соображаю - не смог ночью уснуть и до сей поры в подвешенном состоянии...

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




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

 if (BB_1<0 )  идет как первое обязательное условие, после которого нет необходимости вычислять остальные BB_, ну дык возьми сделай составной if и во втором if произведи необходимые вычисление BB_ при условии, что первый if выполнился, да и конструкция if ... else весьма эффективна, а у тебя только if 

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

 
IgorM:


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

if (BB_1<0 ) идет как первое обязательное условие, после которого нет необходимости вычислять остальные BB_, ну дык возьми сделай составной if и во втором if произведи необходимые вычисление BB_ при условии, что первый if выполнился, да и конструкция if ... else весьма эффективна, а у тебя только if

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

Спасибо, Игорь, я посмотрю, что из этого выйдет. Я вот имел ввиду малость другое... Помнится ещё на заре компьютеризации страны, годах так в 1991-94, точно уже не помню... занимался программированием на ассемблере для ZX Spectrum... жутко медленный и ограниченный в 64Kb памяти... Так вот там была команда процессору для работы с экранной областью памяти для быстрого вывода 16386 Kb в эту область. Задокументированная команда процессора была самой быстрой из всех, работающих с большим массивом данных. И вроде бы уже ничерта с этим не сделаешь, так нет... нашли способ увеличить скорость вывода в четыре раза. Были там команды работы со стеком, так вот они выполнялись гораздо быстрее. Делали так: переносили стек в неиспользуемую область памяти, идущей сразу за экранной, заполняли эту область граф. данными, а потом, переместив стек уже в экранку - быстренько командой заполнения стека перебрасывали подготовленный в памяти экран в экранную область... Просто чудо по тем временам, а для Спектрума - волшебство...

Вот и тут меня интересуют нестандартные методы работы... Ну вроде как посмотреть какие команды за сколько тактов исполняются и сконструировать нечто похожее... Чем можно заменить команды логического сравнения, может вычитание там, или ещё что-нить в том же духе....

 
artmedia70:

Вот и тут меня интересуют нестандартные методы работы... Ну вроде как посмотреть какие команды за сколько тактов исполняются и сконструировать нечто похожее... Чем можно заменить команды логического сравнения, может вычитание там, или ещё что-нить в том же духе....


думаю не найдешь в mql такой информации - уж по принципам работы уж больно на java смахивает с синтаксисом Cи, попробуй потести что быстрее выполняется case или if, помнится в турбопаскале, когда то видел, что if быстрее
 
artmedia70:
Добро пожаловать сюда.
 
Oper:
Подскажите, можно ли из скрипта послать советнику команду на отключение?

Можно. Я к примеру управляю советником с помощью скриптов устанавливающих в определённое состояние глобальные переменные. Состояние этих переменных

анализируются в эксперте и выполняются требуемые команды.

 
Добрый день.
 
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,241); 
Подскажите, как правильно задать размер стрелки и почему её размер при сбросе параметров цвета в настройках увеличивается, а при перекомпилляции уменьшается?
Причина обращения: