[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 53

 

Я заметила такой нюанс, когда я прописываю в советнике принт, а именно:

double Up = iCustom(NULL, 0, "best div original", "*** CCI-OnArray Settings ***", 12, 3, 5, 25, "*** Indicator Settings ***", false, false, false, 0, 1);

Print ("+++++++++++++", Up);

то советник выдает следующий результат - ++++++++++++++ 2147483647. Причем то же число и на буфер вверх и на буфер вниз. Подскажите, что это за код? И как "достать" из Икастом значение именно при появлении стрелки?

 

Прошу знающих людей оказать небольшую помощь: подскажите корректный код для создания Советника/Утилиты алгоритм работы которой заключается в следующем:

- открытие двойной сделки В ОДНУ СТОРОНУ (лоты 0.1 и 0.1) производится в момент пересения low (sell)/high (buy) прошлой сформированной свечи на текущем графике/текущем таймфрейме со стопом в районе high/low той самой свечи, при пересечении которой открыли данную сделку и выставлением в этой же точке отложенного ордера двойной сделки в одну сторону с лотами, например 0.2 и 0.1.

 

Вопрос:

Есть код

int start() 

if (H==TimeHour(TimeCurrent()) && M==TimeMinute(TimeCurrent()) && S==TimeSeconds(TimeCurrent())) 

{+ некоторые условия 

 Тогда открывается ордер

Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,2,SL,TP);
  if (Ticket > 0)
  Alert ("Открыт ордер Buy ",Ticket);
   
  return;}

 Но если в этот момент нету тика он не срабатывает

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

 Но мне нужен только один  и что б не обращал внимания на уже открытые ордера.

Подскажите что сделать
 

 
v2812:

Я заметила такой нюанс, когда я прописываю в советнике принт, а именно:

double Up = iCustom(NULL, 0, "best div original", "*** CCI-OnArray Settings ***", 12, 3, 5, 25, "*** Indicator Settings ***", false, false, false, 0, 1);

Print ("+++++++++++++", Up);

то советник выдает следующий результат - ++++++++++++++ 2147483647. Причем то же число и на буфер вверх и на буфер вниз. Подскажите, что это за код? И как "достать" из Икастом значение именно при появлении стрелки?


Попробуйте передавать значения индикатора не через iCustom(), а через переменные глобального уровня терминала. Это те, которые можно посмотреть по F3. Дело в том, что не редки ситуации, когда это единоственно-нормальный путь передачи данных. У меня такие были.

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

 
palesandr:

Вопрос:

Есть код

int start()

if (H==TimeHour(TimeCurrent()) && M==TimeMinute(TimeCurrent()) && S==TimeSeconds(TimeCurrent()))

{+ некоторые условия

Тогда открывается ордер

Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,2,SL,TP);
if (Ticket > 0)
Alert ("Открыт ордер Buy ",Ticket);

return;}

Но если в этот момент нету тика он не срабатывает

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

Но мне нужен только один и что б не обращал внимания на уже открытые ордера.

Подскажите что сделать


Код советника срабатывает ТОЛЬКО по приходу нового тика. Ордеров открывается больше одного потому, что на следующем тике сигнал установки тоже истинный, а проверки на количество ордеров нет. Нужно пересчитать ордера.
 
drknn:


Попробуйте передавать значения индикатора не через iCustom(), а через переменные глобального уровня терминала. Это те, которые можно посмотреть по F3. Дело в том, что не редки ситуации, когда это единоственно-нормальный путь передачи данных. У меня такие были.

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


Спасибо большое! Сейчас попробую прописать, как Вы сказали.
 
palesandr:
Но если в этот момент нету тика он не срабатывает

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

Но мне нужен только один и что б не обращал внимания на уже открытые ордера.

Подскажите что сделать


1. глобальная datetime last_dt;


2. делайте правильное время

datetime dt=StrToTime(H+":"+M+":"+S);


3.

if (TimeCurrent()>=dt && last_dt<dt) // наступило нужное время и это следующий день

{

// открываем ордер

if (ticket>0) last_dt=TimeCurrent(); // запоминаем время открытия

}

 
v2812:

то советник выдает следующий результат - ++++++++++++++ 2147483647. Причем то же число и на буфер вверх и на буфер вниз.

2147483647 - - это есть константа EMPTY_VALUE
 

Я  это  понял.

Мне нужно поконкретнее про пересчет ордеров. Может пример (в форме кода) или ссылку . 

Я пробовал так

if (Ticket > 0)
Alert ("Открыт ордер Buy ",Ticket);

sleep (10000)
return;}

почемуто не получилось
 

drknn:

Код советника срабатывает ТОЛЬКО по приходу нового тика. Ордеров открывается больше одного потому, что на следующем тике сигнал установки тоже истинный, а проверки на количество ордеров нет. Нужно пересчитать ордера.
 

Мне нужно что б программа не обращала внимание на дату, важно только время

ваш совет подойдет в таком случае? 

sergeev:


1. глобальная datetime last_dt;


2. делайте правильное время

datetime dt=StrToTime(H+":"+M+":"+S);


3.

if (TimeCurrent()>=dt && last_dt<dt) // наступило нужное время и это следующий день

{

// открываем ордер

if (ticket>0) last_dt=TimeCurrent(); // запоминаем время открытия

}

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