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

 
Vovo4ka:

Парни где ошибка гляньте....а то открывает по несколько позиции при сигнале, а иногда и пропускает сигналы....а потом после срабатывания стопа или профита по паре, открывает новую....

Глянте....условия: одновременное пересечение RSI с периодами 14 и 17 уровня 30 снизу вверх и урочнвя 70 сверху вниз..


A1=diRSI1;
      A2=diRSI2;
почему они стоят после условий??
 
Vovo4ka:

Парни где ошибка гляньте....а то открывает по несколько позиции при сигнале, а иногда и пропускает сигналы....а потом после срабатывания стопа или профита по паре, открывает новую....

Глянте....условия: одновременное пересечение RSI с периодами 14 и 17 уровня 30 снизу вверх и урочнвя 70 сверху вниз..


 if (( diRSI1<30 && diRSI2<30)){      
         OpenBuy();
         return(0);
      }

      if (diRSI1>70 && diRSI2>70){
         OpenSell();
         return(0);
      }
я бы сделал так, и еще бы чтоб выставлялалась не сразу бай а байстоп и не селл а селлстоп
 
todem:
я бы сделал так, и еще бы чтоб выставлялалась не сразу бай а байстоп и не селл а селлстоп


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

а значения

A1=diRSI1;
      A2=diRSI2;

это как раз значения RSI предыщей свечи акрытия....они то как раз и должны быть меньше 30 !! тут все правильно...я только не понимаю почему сделки открываются по несколько штук при сигнале!

 
todem:
я бы сделал так, и еще бы чтоб выставлялалась не сразу бай а байстоп и не селл а селлстоп
 
Vovo4ka:


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

а значения

это как раз значения RSI предыщей свечи акрытия....они то как раз и должны быть меньше 30 !! тут все правильно...я только не понимаю почему сделки открываются по несколько штук при сигнале!

Если ты этим перекрестом хочешь добиться чтоб он одну сделку тебе открыл, то это не получиться - это тебе 386 комп, а намного быстрее, которые за 1 секунду выполняют миллион опер. Контрол открытия одной сделки делается путем контроля открытых уже сделок.. Впиши что если всего 0 сделок то открывай, а нет то акстись.
 
todem:
Если ты этим перекрестом хочешь добиться чтоб он одну сделку тебе открыл, то это не получиться - это тебе 386 комп, а намного быстрее, которые за 1 секунду выполняют миллион опер. Контрол открытия одной сделки делается путем контроля открытых уже сделок.. Впиши что если всего 0 сделок то открывай, а нет то акстись.


Хм... в том то и дело если миллион операций, то сделка должна открываться одна....ведь алгоритм как раз такой...

ладно смекну как нить)) если есть код при контроле сделок то дай...плиз))

 
Vovo4ka:


Хм... в том то и дело если миллион операций, то сделка должна открываться одна....ведь алгоритм как раз такой...

ладно смекну как нить)) если есть код при контроле сделок то дай...плиз))

int OrdCon(int nap, int MGV)
  {
    int result=0;
    for (int i=0;i<OrdersTotal();i++) {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if ((nap==0) && (OrderSymbol() == Symbol())&& (OrderMagicNumber() == MGV)) {
        result=result+1; // открыт ордер бай 
      }
      if ((nap==1) && (OrderSymbol() == Symbol()) && (OrderMagicNumber() == MGV)) {
        result=result+1; // открытый ордер селл 
      }
    }
    return(result); // 0 means we have no trades
  }
вот функция
 
todem:
вот функция

      if ((nap==0) && (OrderSymbol() == Symbol())&& (OrderMagicNumber() == MGV)) {
        result=result+1; // открыт ордер бай 
      }
      if ((nap==1) && (OrderSymbol() == Symbol()) && (OrderMagicNumber() == MGV)) {
        result=result+1; // открытый ордер селл 
      }

а в этом месте, собственно, на каком основании делается вывод, что окрытый ордер селл или бай?

вот цельный ранее приведенный код:

int OrdCon(int nap, int MGV)
  {
    int result=0;
    for (int i=0;i<OrdersTotal();i++) {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if ((nap==0) && (OrderSymbol() == Symbol())&& (OrderMagicNumber() == MGV)) {
        result=result+1; // открыт ордер бай 
      }
      if ((nap==1) && (OrderSymbol() == Symbol()) && (OrderMagicNumber() == MGV)) {
        result=result+1; // открытый ордер селл 
      }
    }
    return(result); // 0 means we have no trades
  }
 

Вот я твой РСИ оптимизировал с помощью своего советника

 
//+------------------------------------------------------------------+
//|                                               20/200 expert.mq4  |
//|                                                    1H   EUR/USD  |
//|                                                    Smirnov Pavel |
//|                                                 www.autoforex.ru |
//+------------------------------------------------------------------+

#property copyright "Smirnov Pavel"
#property link      "www.autoforex.ru"

extern int TakeProfit = 20; // Уровень тейкпрофит в пунктах
extern int StopLoss = 200; // уровень стоплосс в пунктах
extern int TradeTime=18;
extern int t1=7;
extern int t2=2;
extern int delta=7;
extern int dayout=1;
extern double lot = 0.1;

int ticket;
bool cantrade=true;

int OpenLong(double volume=0.1)
{
  int slippage=10;
  string comment="20/200 expert (Long)";
  color arrow_color=Red;
  int magic=0;

  ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,Ask-StopLoss*Point,
                      Ask+TakeProfit*Point,comment,magic,0,arrow_color);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
    {
      Print("Buy order opened : ",OrderOpenPrice());
      return(0);
    }  
  }
  else 
  {
    Print("Error opening Buy order : ",GetLastError()); 
    return(-1);
  }
}
  
int OpenShort(double volume=0.1)
{
  int slippage=10;
  string comment="20/200 expert (Short)";
  color arrow_color=Red;
  int magic=0;  
  
  ticket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,Bid+StopLoss*Point,
                      Bid-TakeProfit*Point,comment,magic,0,arrow_color);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
      {
        Print("Sell order opened : ",OrderOpenPrice());
        return(0);
      }  
  }
  else 
  {
    Print("Error opening Sell order : ",GetLastError()); 
    return(-1);
  }
}

int init()
{
  return(0);
}

int deinit()
{   
  return(0);
}

int start()
{
  if((TimeHour(TimeCurrent())>TradeTime)) cantrade=true;  
  // проверяем есть ли открытые ордера ...
  if(OrdersTotal()<1)
  {
    // ... если нет ни одного открытого ордера, то идем дальше
    // проверяем настало ли время для торговли
    if((TimeHour(TimeCurrent())==TradeTime)&&(cantrade)&&(TimeDayOfWeek(TimeCurrent())!=dayout))
    {
      // ... если настало время, то
      if ((Open[t1]-Open[t2])>delta*Point) //Если цена изменилась на величину delta
      {
        //условие выполнено значит входим в короткую позицию:
        // проверяем есть ли свободные деньги для открытия короткой позиции
        if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)<=0 || GetLastError()==134)
        {
          Print("Not enough money");
          return(0);
        }
        OpenShort(lot);
        cantrade=false; //запрещаем торговать повторно до следующего бара
        return(0);
      }
      if ((Open[t2]-Open[t1])>delta*Point) //Если цена изменилась на величину delta
      {
        // условие выполнено значит входим в длинную позицию
        // проверяем есть ли свободные деньги на счету
        if(AccountFreeMarginCheck(Symbol(),OP_BUY,lot)<=0 || GetLastError()==134)
        {
          Print("Not enough money");
          return(0);
        }
        OpenLong(lot);
        cantrade=false;
        return(0);
      }
    }
  }   
  return(0);
}
как вам этот советник?
Причина обращения: