Пожалуйста помогите разобраться с этим ! - страница 2

 

Посмотри у меня в Игрушках 'Игрушки от Vinin'

Может что и подойдет

 
Vinin:

Посмотри у меня в Игрушках 'Игрушки от Vinin'

Может что и подойдет

Да я смотрел ! И вот нашел у вас такой код. Но понимаете этот код открывает ордера на уже существующем баре - но мне это ну нужно. Мне нужно что бы он открывал на следующем баре который появиться . Как мне это сделать ! Люди добрые напишите код как это должно бить !


 static int prevtime=0;
   if(iTime(Symbol(),PERIOD_D1,0) == prevtime)  return(0);
   prevtime = iTime(Symbol(),PERIOD_D1,0);
 
    Open_buy = OrderSend(Symbol(),OP_BUY,0.04,Ask,3,0,0,"",1,0,Blue);
    // RefreshRates();                  
    Open_sell = OrderSend(Symbol(),OP_SELL,0.04,Bid,3,0,0,"",1,0,Red);
 

Напишите свой собственный код когда б при открытии бара (а не на уже существующем баре) открывались ордера !! УВАЖАЕМЫЕ ТРЕЙДЕРЫ ПОМОГИТЕ НАПИСАТЬ КОД !!!

 
rovlent:
Vinin:

Посмотри у меня в Игрушках 'Игрушки от Vinin'

Может что и подойдет

Да я смотрел ! И вот нашел у вас такой код. Но понимаете этот код открывает ордера на уже существующем баре - но мне это ну нужно. Мне нужно что бы он открывал на следующем баре который появиться . Как мне это сделать ! Люди добрые напишите код как это должно бить !

 static int prevtime=0;
   if(iTime(Symbol(),PERIOD_D1,0) == prevtime)  return(0);
   prevtime = iTime(Symbol(),PERIOD_D1,0);
 
    Open_buy = OrderSend(Symbol(),OP_BUY,0.04,Ask,3,0,0,"",1,0,Blue);
    // RefreshRates();                  
    Open_sell = OrderSend(Symbol(),OP_SELL,0.04,Bid,3,0,0,"",1,0,Red);

В данном варианте советник открывает ордера при открытии дневного бара. Если поставить другой таймфрейм или вместо iTime() использовать Time[0], то ордера будут открываться только при открытии соотвествующего бара заданного периода или текущего

 
rovlent:

Напишите свой собственный код когда б при открытии бара (а не на уже существующем баре) открывались ордера !! УВАЖАЕМЫЕ ТРЕЙДЕРЫ ПОМОГИТЕ НАПИСАТЬ КОД !!!

Если ооочень хочешь использовать "сравнение времён", то вставь

prevtime = Time[0];

в функцию init(). Поэтому сразу при запуске (в середине бара) ордера открываться не будут. Я использую Volume[0] > 1 и не парюсь. Единственный довод "сравнения времён" - пропущенные тики из-за занятости "советника" в течении всего предыдущего бара - см. параллельную тему.

Есил хочешь "железно" (в течении нескольких попыток) открывать ордер, то "усложни" блок выставления ордеров:

for (it=1; it<=NumberOfTry; it++) 
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ticket=OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpen);
if (ticket>0) 
{
  . . .
} 
else 
{
  err=GetLastError();
  Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
  Sleep(1000*PauseAfterError);
}
}

Одна из первых реализаций KimIV.

А вообще - скачай себе все функции от KimIV в Инклудник и не используй больше встроенные OrderSend, Modify и т.п.

Правда, в последней версии его SetOrder, "try'ев" уже нет.

 
Vinin:
rovlent:
Vinin:

Посмотри у меня в Игрушках 'Игрушки от Vinin'

Может что и подойдет

Да я смотрел ! И вот нашел у вас такой код. Но понимаете этот код открывает ордера на уже существующем баре - но мне это ну нужно. Мне нужно что бы он открывал на следующем баре который появиться . Как мне это сделать ! Люди добрые напишите код как это должно бить !

 static int prevtime=0;
   if(iTime(Symbol(),PERIOD_D1,0) == prevtime)  return(0);
   prevtime = iTime(Symbol(),PERIOD_D1,0);
 
    Open_buy = OrderSend(Symbol(),OP_BUY,0.04,Ask,3,0,0,"",1,0,Blue);
    // RefreshRates();                  
    Open_sell = OrderSend(Symbol(),OP_SELL,0.04,Bid,3,0,0,"",1,0,Red);

В данном варианте советник открывает ордера при открытии дневного бара. Если поставить другой таймфрейм или вместо iTime() использовать Time[0], то ордера будут открываться только при открытии соотвествующего бара заданного периода или текущего

Да. Мне так и нужно что бы ордера открывались на дневном баре. Может я в чем то не понимаю но все же. Вот что я сделал.

#property copyright ""
#property link      ""
 
extern int Open_buy;
extern int Open_sell;
static int prevtime=0;
 
int start()
  {
         
   if(iTime(Symbol(),PERIOD_D1,0) == prevtime)  return(0);
            prevtime = iTime(Symbol(),PERIOD_D1,0);
   
      Open_buy = OrderSend(Symbol(),OP_BUY,0.04,Ask,3,0,0,"",1,0,Blue);              
      Open_sell = OrderSend(Symbol(),OP_SELL,0.04,Bid,3,0,0,"",1,0,Red);
 
      if(Open_buy<0)
       {
        Print(" --------- OrderSend Open_buy failed with ERROR #",GetLastError());
        return(0);
       }
       
       if(Open_sell<0)
       {
        Print(" --------- OrderSend Open_sell failed with ERROR #",GetLastError());
        return(0);
       }
    
    }

По вашей идеи ордера должны открываться при открытии нового дневного бара ! Я правильно понимаю !

Но нет воспользовавшись я этим кодом - у меня выходит то что ордера открываются на уже существующем баре !!! Но мне так ну нужно !

 
rovlent:

По вашей идеи ордера должны открываться при открытии нового дневного бара ! Я правильно понимаю !

Но нет воспользовавшись я этим кодом - у меня выходит то что ордера открываются на уже существующем баре !!! Но мне так ну нужно !

Давай порассуждаем.

Что такое существующий бар?

Существующий бар - это бар который формируется. Нас интересует его открытие. Время открытия бара не меняется. Оно постоянно.

Поэтому ордер можно открыть только на существующем и для контроля нового бара используется его время открытия. Советник на каждом баре отрабатывает только один раз, но в момент начала его формирования.

А мне кажется ты хочешь открыть ордер на будущем баре. Но его еще нет.

 
Vinin:
rovlent:

По вашей идеи ордера должны открываться при открытии нового дневного бара ! Я правильно понимаю !

Но нет воспользовавшись я этим кодом - у меня выходит то что ордера открываются на уже существующем баре !!! Но мне так ну нужно !

Давай порассуждаем.

Что такое существующий бар?

Существующий бар - это бар который формируется. Нас интересует его открытие. Время открытия бара не меняется. Оно постоянно.

Поэтому ордер можно открыть только на существующем и для контроля нового бара используется его время открытия. Советник на каждом баре отрабатывает только один раз, но в момент начала его формирования.

А мне кажется ты хочешь открыть ордер на будущем баре. Но его еще нет.

Да верно вы поняли мне нужно открыть ордер на будущем баре!


Я использовал вот такой вот код !

if(Volume[0]>1)
return;
 
RefreshRates();
Open_buy = OrderSend(Symbol(),OP_BUY,1.00,Ask,3,0,0,"",1,0,Blue);
RefreshRates();
Open_sell = OrderSend(Symbol(),OP_SELL,1.00,Bid,3,0,0,"",1,0,Red);
 
if(Open_buy<0)
{
Print(" --------- OrderSend Open_buy failed with ERROR #",GetLastError());
return(0);
}
 
if(Open_sell<0)
{
Print(" --------- OrderSend Open_sell failed with ERROR #",GetLastError());
return(0);
}
Но дело в том ! Как я уже писал может бить таке что ордера могут не открыться совсем и нет ни каких ошибок или же сообщений, а бывает такое что открываются ! Говорили что нужно использовать RefreshRates(); но я использую но никаких результатов !!!
 
rovlent:
Да верно вы поняли мне нужно открыть ордер на будущем баре!
Но дело в том ! Как я уже писал может бить таке что ордера могут не открыться совсем и нет ни каких ошибок или же сообщений, а бывает такое что открываются ! Говорили что нужно использовать RefreshRates(); но я использую но никаких результатов !!!

Советник работает по приходу тика. Тик всегда принадлежит существующему бару. Открыть ордер в будущем невозможно. Будущих тиков еще нет.

 
При открытии бара должны открыться ордера.То-есть как только ордер откроется для примера на дневном графике сразу же должны сработать ордера. Но ну на уже сформированном баре.
Причина обращения: