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

 
r772ra:
Еще вариант, можно устанавливать любое время после поступления сигнала
Мой вариант подразумевает ограничение (после прихода сигнала) на выполнение каких-то действий (в данном случае на открытие ордера) в 1 минуту. А затем: не успел - опоздал. Предположим, что, сразу после прихода сигнала, оборвалась связь с сервером и возобновилась, скажем, через час. Зачем через час открывать ордер??? ;)
 
TarasBY:

В глобальную переменную пишите значение времени в момент поступления сигнала:

а затем отсчитываете свою минуту (можно так):

Это один из вариантов решения отслеживания времени после наступления какого-то события.


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


bool  Fact_1 = false;                    // Глобальная перемен для бай.    
bool  Fact_2 = false;                    // Глобальная перемен для бай
bool  Fact_3 = false;                    // Глобальная перемен для бай

double support;
double resist;

 int timeFrame = 5;
 int numBars = 15;
 datetime gdt_TimeSignal;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----

  ObjectsDeleteAll();  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----


   //---------------------------------------------------------------------------
if (Fact_3==true)                            //Если событие уже..
          
                                              //..было, то выходим
     return(0);
 
//----

  //---- БЛОК ОТКРЫТИЯ  BUY--------------------------------------------------------------
 
 if (iMA(NULL,PERIOD_M5,50,0,MODE_EMA,PRICE_CLOSE,2)<iMA(NULL,PERIOD_M5,200,0,MODE_EMA,PRICE_CLOSE,0)&&
iMA(NULL,PERIOD_M5,50,0,MODE_EMA,PRICE_CLOSE,1)>=iMA(NULL,PERIOD_M5,200,0,MODE_EMA,PRICE_CLOSE,0))//если МА50 пересекает МА200 снизу вверх по M5
Fact_1 = true;       // Произошло событие 1  
//-
if (Fact_1 == true &&  Low[0]<= iMA(NULL,PERIOD_M5,50,0,MODE_EMA,PRICE_CLOSE,0))//если цена опустилась до МА50
 Fact_2 = true; // Произошло событие 2  


//if (Signal) gdt_TimeSignal = TimeCurrent();
if (Fact_2) gdt_TimeSignal = TimeCurrent();


  if (gdt_TimeSignal != 0) if (iBarShift (NULL, 1, gdt_TimeSignal) == 1)
    {
        //---- Открываете ордер
       // OrderSend ();
  //---------------------------------------------------------------------------------    
{
// Определяем линии поддержки\сопротивления
  support = 10000;
  resist = 0;
 
  for(int u = 1;u<=numBars;u++)
  {
   if(support>iLow(Symbol(),timeFrame,u))
     support = iLow(Symbol(),timeFrame,u);
   if(resist<iHigh(Symbol(),timeFrame,u))
     resist = iHigh(Symbol(),timeFrame,u);
  }   
   ObjectSet("lineSupport",OBJPROP_PRICE1,support);
  ObjectSet("lineResist",OBJPROP_PRICE1,resist);
 
 }


 //----
  {
    ObjectCreate("lineSupport",OBJ_HLINE,0,0,0);
    ObjectSet("lineSupport",OBJPROP_COLOR,Blue);
    
    ObjectCreate("lineResist",OBJ_HLINE,0,0,0);
    ObjectSet("lineResist",OBJPROP_COLOR,Red);
    }
//-------------------------------------------------------------
 
        gdt_TimeSignal = 0;
    }



//что сюда добавить что бы линии появившись, оставались на месте?




//----
   return(0);
  }

 
TarasBY:

Здесь написана ерунда:

Почитайте про iCustom().


спасибо .Я прочитал .Наверно мне надо поискать пример ..ато нихрена так не понимаю .
 
Andrey-F:

Большая просьба помочь, подскажите, как в двух-трех строчках реализовать код советника:

При поступлении сигнала (напр. пересечения двух МА)

  1.Советник определяет  время поступления сигнала(в часах, минутах),запоминает его;

  2.Отсчитывает одну минуту.

Далее, готовность совершить какое-либо действие(напр. открытие ордера)

Все, СПАСИБО, все работает как надо, просто не совсем так сигнал вставил.
 

Чето немогу разобраться с публикацией индикатора в  Кодабазе. Вроде статус стоит готов к публикации т.е. по логике вещей осталось дождаться пока модератор разместит в общем доступе данный индюк, однако прошло уже несколько дней и результата никакого. В чём может быть проблема ?

пс. это моя первая публикация кода здесь 

 
madzx:

Да уж пожалуй согласен !  Я уж тут точно исхитрился, можно и без писанины на диск обойтись влегкую ! 
Я тут просто вяжу поводья от стандартного терминала на еще один 
который наваял под себя как душа просит ну вот и пошел по накатанной тропке :)

Прошу меня простить, однако мы эту беду по-любому наваяем
ибо как завешал нам сэр Фреди Меркьюри
Show must go on !!! 

Значит так давай уточним техзадание 
Как я это понял  :

1. На одном счету открыты хренова туча окон (10 штук) с любым набором графиков валютных пар

2. На каждом графике сидит рабочая лошадка - советник, который чиво то там делает

3. На счету должны соблюдаться следующие условия:

3.1 Общее количество открытых рыночных ордеров на счету  не должно превышать 5
     при этом ордера типа horse (отложенные) за людей не считаем (думается мне так но ты же это не уточнил)
3.2  исходя из набора графиков на счету сформировано некий список символов,

типа фининструментов по которым ведется торговля, при этом каждый из инструментов

в любой момент времени может иметь не более одного открытого ордера.

---------------------------------------------------------

Вот что то типа этого!  Посмотри все ли тут правильно!
Далее уточни пожалуйста на каком языке надо это наваять  (типа mq4 или mq5 )
и еще список инстументов, по которым ведется торговля  - фиксированный или каждый раз свой 

Думаю что коротенкая вставка в текст каждого советника

  (которую потом при желании можешь оформит как процедуру) позволит ему 

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

 За сим разрешите откланяться ибо у меня сейчас 5 утра  :))

madzx 

 

 

 

 

 


 

Спасибо за участие. Но думаю, уже не к чему.

Вопрос решился следующим образом, как подсказал r772ra:

А может так :

if(NumberOfPositions("EURUSD")==0 && NumberOfPositions()<5)
А зесь функция
 
Roman.:

Не пАрьтесь в трёх соснах. Разводите сделки экспов под уникальные магики (присваиваете СВОЙ магик ордерам СВОЕГО экспа на выбранных символах). Далее уже, применяя условный оператор if - else, подключаете фильтр по символам и магикам, используя с разными вх. значениями эту функцию от Ким И.В:

Функция NumberOfOrders().

. Всё.




Спасибо, нашлось более простое решение.
 
Kobalerro:

Спасибо, нашлось более простое решение.

ОК! Спасибо, что выложили решение.
 
Kobalerro:

Спасибо за участие. Но думаю, уже не к чему.

Вопрос решился следующим образом, как подсказал r772ra:

А может так :

А зесь функция

OK!  Попутного тренда и удачной охоты !!!  

madzx
 
Kobalerro:

Спасибо за участие. Но думаю, уже не к чему.

Вопрос решился следующим образом, как подсказал r772ra:

А может так :

А зесь функция

Если Вас устраивает такое решение, то можно код ещё упростить:

if(NumberOfPositions("EURUSD")==0 && OrdersTotal()<5)

НО, наверное, правильнее записать так:

if(NumberOfPositions(Symbol())==0 && OrdersTotal()<5)

а, если не "по-детски", то нужно задействовать Магик (рано или поздно захочется параллельно открыть ручной ордер или поставить рядом и другой советник):

if(NumberOfPositions(Symbol(), Magic)==0 && NumberOfPositions("", Magic)<5)

Магик при этом у всех советников должен быть один и не забудьте при других операциях со списком ордеров использовать фильтры на Магик и символ графика:

    for (int li_pos = OrderTotal() - 1; li_pos >= 0; li_pos--)
    {
        if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_TRADES)) continue;
        if (OrderMagicNumber() != Magic) continue;
        if (Symbol() != OrderSymbol()) continue;
        //---- дальнейшие опреации (модификация, удаление и т.д.)
    }

Магик во внешних переменных у Вас надеюсь объявлен, или как константа:

#define Magic  555
Причина обращения: