Миллион if или всё одной строчкой? - страница 3

 
HTMax:

Проверял, я же написал, что условия работают... 

На сколько я понял, когда тестировал и проверял переменные, а так же массивы, всё работает.. Сама проблема в цикле..  for  .. 

Ну так, увидев, что, с заведомо верно работающим условием, в итоге в все работает неверно, изменится область поиска ошибки. 

Да и у вас все еще неправильный код в том месте, которое я показал. Потом Максим написал, что у массивов отсчет с нуля... а фигли толку  

 
Dmitry Fedoseev:

Ну так, увидев, что, с заведомо верно работающим условием, в итоге в все работает неверно, изменится область поиска ошибки. 

Да и у вас все еще неправильный код в том месте, которое я показал. Потом Максим написал, что у массивов отсчет с нуля... а фигли толку  


Можно более конкретнее, кодом, не словами..  Я же объяснял, что несведущий в программировании..

 
HTMax:


Можно более конкретнее, кодом, не словами..  Я же объяснял, что несведущий в программировании..

Кодом? Ладно. Ноль вот так выглядит:

0

А остальное уже все было показано.

 
Dmitry Fedoseev:

Кодом? Ладно. Ноль вот так выглядит:

А остальное уже все было показано.


А при чём тут 0 к нашей переписке с Максимом?


Обсуждалось следующее:

И вот в таком варианте кода,  если будут выбраны оба условия для фильтрации входа

extern bool VHOD_PO_MA_14 = TRUE;
extern bool VHOD_PO_MA_34 = TRUE;

то вход осуществляется ИЛИ по  VHOD_PO_MA_14  ИЛИ по VHOD_PO_MA_34, а нужно ,что бы открытие ордеров осуществлялось И по   VHOD_PO_MA_14 И по  VHOD_PO_MA_34 (Другими словами если в BUY то ордер открывается только если Ask больше  iMA(NULL,0,14,..  И Ask больше  iMA(NULL,0,34.. !)


Не забываем для чего всё этого нужно, потому что

extern bool VHOD_PO_MA_14 = FALSE;
extern bool VHOD_PO_MA_34 = FALSE;

extern bool VHOD_PO_MA_44 = FALSE
extern bool VHOD_PO_MA_54 = FALSE;
extern bool VHOD_PO_MA_.. .. .......


 И таких условий может быть миллион!



И к стати да будет вам известно., 0 - это не код., это цифра..

Если можно, помогите, как нужно составить код, на поставленную задачу...

 
HTMax:


Можно более конкретнее, кодом, не словами..  Я же объяснял, что несведущий в программировании..

Уфффф...спокойно, Ипполит, спокойно..выдыхаем..

----

код для/за вас никто писать не будет. Дали несколько (более 2-х) набросков, словами пояснили.

последний раз:

В input имеется тьма флагов, означающих надо или нет делать конкретную проверку перед торговой операцией.

Вам необходимо написать код, без "кучи скобочек" который это делает.

1. то что дано в input не меняется на протяжении работы советника. Поэтому делаем из его флагов массив, подчёркиваю - массив флагов, то есть просто копируем значения. Во время инициализации программы, в OnInit

2. когда приходит пора проверять значения, то просматривая этот (уже готовый, почти const) массив флагов мы знаем которое условие проверять. И проверяем если требуется. Если хотя-бы одно требуемое условие неверно, то не торгуем. Потому-что в исходном посыле, все условия через "И"

3. и так далее... Осознавайте задачу, думайте алгоритм, пишите код,

вот код обсудить и если что поправить можем :-)

 
Maxim Kuznetsov:

вот код обсудить и если что поправить можем :-)


Максим благодарен за выдержку. Если бы я был программистом, я бы сюда не обращался. Написал бы всё сам..  К сожалению имею поверхностное понятие об программировании. Поэтому и обратился за помощью...  Что смог понять из ваших вариантов сделал, как понял, как смог:

//+------------------------------------------------------------------+
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern bool VHOD_PO_MA_14 = FALSE;
extern bool VHOD_PO_MA_34 = FALSE;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int start()
  {
//---
//+-----------------------------------------+
//|                   ВХОД                  |
//+-----------------------------------------+  

             
              bool ShouldCheckCondition_BUY[2];
              bool ShouldCheckCondition_SEL[2]; 
                      
             //+-----------------------------------------+ USLOVIA V BUY +-----------------------------------------+
             if (VHOD_PO_MA_14 == true && Ask >  iMA(NULL,0,14,0,MODE_SMMA,PRICE_MEDIAN,0);) ShouldCheckCondition_BUY[0] = true; 
             if (VHOD_PO_MA_34 == true && Ask >  iMA(NULL,0,34,0,MODE_SMMA,PRICE_MEDIAN,0);) ShouldCheckCondition_BUY[1] = true;
             //+-----------------------------------------+ USLOVIA V SELL +----------------------------------------+
             if (VHOD_PO_MA_14 == true && Bid <  iMA(NULL,0,14,0,MODE_SMMA,PRICE_MEDIAN,0);) ShouldCheckCondition_SEL[0] = true; 
             if (VHOD_PO_MA_34 == true && Bid <  iMA(NULL,0,34,0,MODE_SMMA,PRICE_MEDIAN,0);) ShouldCheckCondition_SEL[1] = true;
             //+------------------------------------------+ END USLOVIYAM +----------------------------------------+
             
                      
              bool doTrade_BUY;

               for (int isccb=0;isccb<ArraySize(ShouldCheckCondition_BUY);isccb++) {
                    if (ShouldCheckCondition_BUY[isccb]) {
                        doTrade_BUY=true; // открываем ордер в BUY 
                     if (!ShouldCheckCondition_BUY[isccb]) {
                                          // если не склалось - то всё,не торгуем
                       doTrade_BUY=false;break; 
                      }
                     }
                   }    
                                        
  }


И описал проблему при таком варианте вместо И работает как ИЛИ..

 
HTMax:


Максим благодарен за выдержку. Если бы я был программистом, я бы сюда не обращался. Написал бы всё сам..  К сожалению имею поверхностное понятие об программировании. Поэтому и обратился за помощью...  Что смог понять из ваших вариантов сделал, как понял, как смог:


И описал проблему при таком варианте вместо И работает как ИЛИ..

a) почитайте справочник и перестаньте использовать start()

б) внимательно прочтите ветку. А конкретно - зачем (с какой целью) заводится массив.

*) даже в приводимом вами-же коде синтаксические ошибки. Мы их конечно видим, но мы не компилятор, ругаемся неоднотипно

 
HTMax:


...

И к стати да будет вам известно., 0 - это не код., это цифра..

Если можно, помогите, как нужно составить код, на поставленную задачу...

А я разве писал что 0 это код? Было показано как 0 выглядит в коде.

 
HTMax:


А при чём тут 0 к нашей переписке с Максимом?


...

Притом