[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 123

 
В сем спасибо за помощь, я вместо OrdersTotal() поставил OrdersHistoryTotal(). Заработало.
 

Тем кто понимает в mql4 больше меня помогите пожалуйста. Есть 3 вопроса.

1.Сначала по константе double. Есть всем известные iMa, машки, Moving Average/ Вопрос в следующем: Не корректное отображение значений

Пример:

extern string  MA1="";
extern string  MA2="";
extern string  MA3="";
string com;


double MA1 = iMA(NULL,PERIOD_M15,9,0,0,0);
double MA2 = iMA(NULL,PERIOD_M15,15,0,0,0);
double MA3 = iMA(NULL,PERIOD_M15,21,0,0,0);

if (MA1>MA2 && MA1!=MA2 && MA1>MA3 && MA1!=MA3 ) com="значение1";
if (MA1<MA2 && MA1==MA2 && MA1<MA3 && MA3!=MA3 ) com="значение2";

  Так вот значение всё  время будет = значение1. Код упорно не хочет понимать != (не равно)

 

2. Вопрос    /Открытие Поиск Закрытие/

Чего я хочу от программы но не выходит.

1.Проверка условия (true ; false)

2. Если такой ордер есть то не открываем, если нету открываем. По условию OrderComment()

3. Проверка  Если наступило событие X или Y закрываем. X-(например другой сигнал iMA1>iMA2, Y-другой сигнал iMA2>iMA3)

Вот как это делаю я но ничего не выходит.

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)
{
   for (int i=1;i<=OrdersTotal(); i++)       
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);
            else
            {
            OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);
            }
           }
       } 
}

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

 

3. Вопрос про смещение (int shift)

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

double MA1 = iMA(NULL,PERIOD_M15,9,0,0,0);
double MA2 = iMA(NULL,PERIOD_M15,15,0,0,0);
double MA3 = iMA(NULL,PERIOD_M15,21,0,0,0);

double MA4 = iMA(NULL,PERIOD_M15,9,0,0,3);
double MA5 = iMA(NULL,PERIOD_M15,15,0,0,3);
double MA6 = iMA(NULL,PERIOD_M15,21,0,0,3);

 

 Помогите знаниями кто чем сможет. За ранее благодарю. Или ссылку где в интерне есть похожая реализация кода.

 
dertop:

Тем кто понимает в mql4 больше меня помогите пожалуйста. Есть 3 вопроса.

1.Сначала по константе double. 

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

3. Вопрос про смещение (int shift)

1. https://www.mql5.com/ru/articles/1561

2. if (условия по закрытию) OrderClose(...)

3. Посмотрите что это именно за смещение и кого оно смещает
 
ilunga:

1. https://www.mql5.com/ru/articles/1561

2. if (условия по закрытию) OrderClose(...)

3. Посмотрите что это именно за смещение и кого оно смещает


Большое спасибо за такой быстрый ответ.

По 1. Да осознал понял будем там копать.(Спасибо)

По 2.  if (условия по закрытию) OrderClose(...) (это понятно без это-го не куда) Ноя запутался в if, что зачем куда и почему....

Поправить если не правильно....

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)                                         // если true то заходим в тело цикла...
{
   for (int i=1;i<=OrdersTotal(); i++)                                                             //шаг2 проверяем все ордера на наличие ордера со значением1
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);                                            // если орден найден то ничего не делаем
            else
            {
            OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);   // а вот тут проблемы кто за чем идёт и куда вставить условие закрытие отдельно за телом всего условия (ma1;ma2 и тд), или там где OrderSelect()
            }
           }
       } 
}

 3. Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад). из справки mql4  

 
dertop:


Большое спасибо за такой быстрый ответ.

По 2.  if (условия по закрытию) OrderClose(...) (это понятно без это-го не куда) Ноя запутался в if, что зачем куда и почему....

Поправить если не правильно....


if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)                                         // если true то заходим в тело цикла...
{
   for (int i=1;i<=OrdersTotal(); i++)                                                             //шаг2 проверяем все ордера на наличие ордера со значением1
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);                                            // если орден найден то ничего не делаем
            else
            {
            OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);   // а вот тут пока написано следующее: для каждого из ордеров у которого мы сюда зашли мы поставим еще один ордер
            }
           }
       } 
}
 
ilunga:

Извините, зачем проверять неравенство, если в условии уже дано! Так тормозится чтение условий и их выполнение!

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)//MA1!=MA2 && и && MA2!=MA3 не нужны, т.к. в предыдущих сравнениях
                                                          //равенство ухе исключено! Так что нужно так:
if (MA1>MA2 && MA1<MA3 && MA2>MA3)
 
borilunad:

Извините, зачем проверять неравенство, если в условии уже дано! Так тормозится чтение условий и их выполнение!


Что-то тут странно

if (MA1>MA2 && MA1<MA3 && MA2>MA3)

 MA1>MA2 и MA2>MA3 и тут же MA1<MA3

Тем более что достаточно

 

if (MA1>MA2 && MA2>MA3)
 
borilunad:

Извините, зачем проверять неравенство, если в условии уже дано! Так тормозится чтение условий и их выполнение!

 

 


Да извините тут немножечко не дописал, сначала не придал этому значение. Эти расчёты производятся для 4 МА; И бываю случаи когда МА1>MA2 и в это время МА3=МА4 (поэтому проверка нужна ибо так построена стратегия)

 

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2<MA3 && MA2!=MA3 && MA3<MA4 && MA3!=MA4)                                         // если true то заходим в тело цикла...
{
   for (int i=1;i<=OrdersTotal(); i++)                                                             //шаг2 проверяем все ордера на наличие ордера со значением1
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);                                            // если орден найден то ничего не делаем
                else
                {
                if (OrderComment()!="значение1")                                                         // если такого ордера нету
                   {
                   OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);   // тогда открываем
                   }
                }
         if (MA1<MA2 && MA1!=MA2 && MA1>MA3 && MA1!=MA3 && MA3>MA4 && MA3!=MA4)                          // если true новый сигнал
             {
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);               // тогда закрываем
             }

           }
       } 
}

 Как то так?????

 
Vinin:


Что-то тут странно

 MA1>MA2 и MA2>MA3 и тут же MA1<MA3


Да извините запутался, первый раз писал на форум. Сначала копипастел, затем решил ручками и запутался... но в примере выше все верно..

MA1>MA2 и МА1<MA3 и МА3<МА4 

 

Добрый день.

Помогите пожалуйста переделать индикатор.

Есть стандартный Pivot, так вот хотелось бы иметь индикатор который рассчитывает уровни по стандартным формулам но по данным H, L, C  которые я ввожу сам.

Спасибо всем, кто откликнется. 

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