Очень нужна помощь!!!! - страница 2

 
keekkenen >>:

худшая цена не связана с аск и бид - это из другой песни, наверное, про зайцев..

проснись и пой !

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

я что-то не пойму это я не спал ночь или вы ?

 А ты спой, и прозреешь.)))

 
keekkenen >>:

наврали половину.. бай - открытие/закрытие по бид, селл - открытие/закрытие по аск

Нда... :-)      А где у вас спред? Я б по таким условиям как у вас уже мульен наторговал, может вы откроете свой ДЦ ;-)

 
ну хоть кто-нибудь хелп ми!!!
 
Destr >>:

"спс за ответы.но их много еще...."

вопрос-как сделать так чтобы позиция открывалась всего один раз а не при каждом изменении цены на 1 пункт при нахождении sar выше или ниже цены открытия свечки?(создал такой глюк-не пойму как избавиться)

вопрос-Close(0)-что означает? типа текущая цена? 


1) Чтобы советник не открывал новый ордер при каждом тике прочитайте про функцию:

OrdersTotal()

Самый простой способ, поставить проверку типа:

if(OrdersTotal()<1 && "сигналы...")

 {

  Тут например открываются ордера

 }

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

2) Close[0] это цена закрытия текущего бара, практически да-это текущая цена.

 
спасибо попробую обязательно!!
 

вот смотрите--

пишу так:

int start()
   
  while (iSAR(NULL,0,0.05,0.2,0)<Close(0))
  {
  OrderSend(Symbol(),OP_BUY,0.1,NULL,10*Point,Bid-100*Point,Ask+500*Point,"КУПИЛ",1,0,Blue);
  }
   
  return(0);

'while' - semicolon expected  - 1 ошибка. В чем прикол??или надо все данные с индикатора iSAR записывать в буфер типа SARBUFFER{i}? и потом уже оттуда втаскивать их в WHILE???





 

добавил еще  фишку с ордерами=)

правильно.и будет ли работать?( ошибка WHILE все еще сохранилась(вот засада!!!!)).

int start()
  while(iSAR(NULL,0,0.05,0.2,0)<Close(0))
  {
  OrderSend(Symbol(),OP_BUY,0.1,NULL,10*Point,Bid-100*Point,Ask+500*Point,"КУПИЛ",1,0,Blue);
   
  if (OrdersTotal()<2 && OrdersTotal>0);
  Alert("Открыта позиция!!!");
   
  return(0);
}

 

ерунда какаято :-)

Вот например простой способ :

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
  {
//----
  while(iSAR(NULL,0,0.02,0.2,0)<Close[0]){
    if(Orders(Magic,OP_BUY)>0){
     //Открываем ордер buy
      if(OrderSend(Symbol(),OP_BUY,...)<0){
        Alert("Не удалось открыть ордер buy, ошибка:"+GetLastError());
       }
      else
        Alert("открыт ордер buy"); 
     }}

  while(iSAR(NULL,0,0.02,0.2,0)>Close[0]){

    if(Orders(Magic,OP_SELL)>0){
     //Открываем ордер sell
      if(OrderSend(Symbol(),OP_SELL,...)<0){
        Alert("Не удалось открыть ордер sell, ошибка: "+GetLastError());
       }
      else
        Alert("открыт ордер sell"); 
     }} 
  }
//----
  return(0);
  }
//+------------------------------------------------------------------+
int Orders(int Magic, int cmd)
 {
  int Total=OrdersTotal();
  for(int i=0; i<Total; i++){
    if(OrderSelect(i,SELECT_BY_POS)){
    if(OrderSymbol()!=Symbol()) continue;
    if(OrderMagicNumber()!=Magic) continue;
    if(OrderType()==cmd){
      return(0);

     }}}

  return(1);

 }


 
Destr >>:

вот смотрите--

пишу так:

int start()
   
  while (iSAR(NULL,0,0.05,0.2,0)<Close(0))
  {
  OrderSend(Symbol(),OP_BUY,0.1,NULL,10*Point,Bid-100*Point,Ask+500*Point,"КУПИЛ",1,0,Blue);
  }
   
  return(0);

'while' - semicolon expected  - 1 ошибка. В чем прикол??или надо все данные с индикатора iSAR записывать в буфер типа SARBUFFER{i}? и потом уже оттуда втаскивать их в WHILE???





ТАК ПИСАТЬ НЕЛЬЗЯ!!!  

Все должно выполняться внутри функции старт:

int start()
{  
  while (iSAR(NULL,0,0.05,0.2,0)<Close[0])
    {
      ...
    }
  return(0);

}




 
А вообще то вы зря используете здесь цикл вайл...
Причина обращения: