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

 

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

На H4 бар пробивает машку снизу вверх, где собственно и закрывается и это есть условие на покупку. Покупаем. Теперь надо взять сколько-то пунктов, ну, грубо десять, закрыться (до этого места все было просто и понятно для меня) и свалить курить до следующего бара (вот это как раз и не получается). Как только ордер закрывается, открывается новый (условие-то продолжает выполняется), как запретить торговать до следующего бара?

Вроде все просто, чувствую, решение где-то рядом, но знаний не хватает (или мозгов))). Сразу признаюсь, 549 страниц неосилил и если уже кто-то спрашивал... Сильно не ругайтесь)))

Помогите пожалуйста

 

FAQ

 
Спасибо
 
ex_kalibur:

Здрасте, помогите плиз, че то я совсем очевидного не вижу((((

double LotsAllPos(int op) {

int i;

double ll=0;

for (i=0; i<OrdersTotal(); i++) {

if (OrderType()!=op) continue;

if (OrderSymbol()!=sy) continue;

if (OrderMagicNumber()==Magic || OrderMagicNumber()==Magic+1) ll+=OrderLots();

}

return(ll);

здесь мне нужно вернуть суммированный обьем по моему символу, и по типу

for (i=0; i<OrdersTotal(); i++) {
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
   if (OrderType()!=op) continue;

....
   }
 
Sepulca:


спасибо помогли
 

Подскажите в чем проблема может быть у меня. Переменная newlots равна 0.2.

При запуске советника Print 1 сначала выводит сообщение - 1 0.2, затем срабатывает условие на открытие ордера, ордер открывается, но функция Print 2 которая стоит перед ним не выводит сообщение, не могу понять почему она пропускается, ведь условие срабатывает и если к функции ордера путь открыт, то и функция Print должна быть захвачена. В журнале помимо этого не выводится сообщение о том что ордер отправлен, стандартное сообщение которое выводилось при открытии каждого ордера.

Но это еще не самое страшное, главная проблема в том что переменная newlots равна 0.2, а ордер открывается объемом 0.1, как такое вообще возможно, ведь в функции четко прописано на месте объема переменная newlots.

  Print("1 ",newlots);
  
  if(условие)
    {
    if(buytime != Time[0] && buys == 0 && sells == 0)
      {
      Print("2 ",newlots);
        if(OrderSend(Symbol(),OP_BUY,newlots,Ask,Slippage,0,0,0,MagicNumber,0,BuyColor) > 0)
          {
          buytime = Time[0];
          }
      }
    }

// пробовал даже вот так, в этом случае выводятся только первые два сообщение, причем значение выводится что newlots все таки равен 0.2, но третье сообщение
не выводится, и ордер открывается с лотом 0.1.


Print("1 ",newlots); - равен 0.2


Print("2 ",newlots); - равен 0.2

Print("3 ",newlots); - не выводится сообщение, и далее ордер открывается с лотом 0.1



Print("1 ",newlots);
  if(((Ask > (MA1+3*Point*a)) && (Open[0] < (MA1+3*Point*a)) && (Ask < (MA1+5*Point*a))) || ((Low[0] < (MA1+3*Point*a)) && (Bid > (MA1+3*Point*a)) && (Bid < (MA1+5*Point*a))))
    {
    Print("2 ",newlots);
    if(buytime != Time[0] && buys == 0 && sells == 0)
      {
      Print("3 ",newlots);
        if(OrderSend(Symbol(),OP_BUY,newlots,Ask,Slippage,0,0,0,MagicNumber,0,BuyColor) > 0)
          {
          buytime = Time[0];
          }
      }
    }

 
sss2019:

Подскажите в чем проблема может быть у меня. Переменная newlots равна 0.2.

При запуске советника Print 1 сначала выводит сообщение - 1 0.2, затем срабатывает условие на открытие ордера, ордер открывается, но функция Print 2 которая стоит перед ним не выводит сообщение, не могу понять почему она пропускается, ведь условие срабатывает и если к функции ордера путь открыт, то и функция Print должна быть захвачена. В журнале помимо этого не выводится сообщение о том что ордер отправлен, стандартное сообщение которое выводилось при открытии каждого ордера.

Но это еще не самое страшное, главная проблема в том что переменная newlots равна 0.2, а ордер открывается объемом 0.1, как такое вообще возможно, ведь в функции четко прописано на месте объема переменная newlots.


Где в коде еще открытие ордера? Где еще OrderSend?

В том участке, что вы показали не выполняется условие, а следовательно ваша Принт 2, а следовательно OrderSend в данном условии тоже не открывается - не открывается ордер с лотом 0.2.

Выполняется другой OrderSend.

 
zxc:


Где в коде еще открытие ордера? Где еще OrderSend?

В том участке, что вы показали не выполняется условие, а следовательно ваша Принт 2, а следовательно OrderSend в данном условии тоже не открывается - не открывается ордер с лотом 0.2.

Выполняется другой OrderSend.


Ну вот же

if(OrderSend(Symbol(),OP_BUY,newlots,Ask,Slippage,0,0,0,MagicNumber,0,BuyColor) > 0)

У меня всего один OrderSend в советнике, условие выполняется и ордер открывается, непонятно каким объемом.

 

Подскажите, когда вместе с советником идет set, его в какую папку надо кидать? Спасибо.

 

Доброго времени суток!

Подмогните, считывание из файла, там лежит одна строка( а вообще говоря будет больше, но эт неважно), зацикливается, как будто не видит конца файла...

int qq=0;
 while (FileIsEnding(h3)==false)
 {
  int uu=0;
  while (FileIsLineEnding(h3)==false)
  { 
    Histxmas[qq][uu]=StrToDouble(FileReadString(h3));
    Print("Histxmas[",qq,"][",uu,"]=",Histxmas[qq][uu]);
    uu+;
  }
  FileSeek(h3,0,SEEK_END);   
  qq++;
  Print("Бро зациклился, покажи мне кюкю",qq);
 }
Причина обращения: