[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 149

 
Vovo4ka:

Caras, onde está o erro olha....a então abre várias posições no sinal, e às vezes falha o sinal....a então depois de acionar uma parada ou lucro sobre o par, abre uma nova....

Look.... conditions: cruzamento simultâneo do RSI com os períodos 14 e 17 do nível 30 de baixo para cima e tendência 70 de cima para baixo...


A1=diRSI1;
      A2=diRSI2;
por que eles estão atrás das condições?
 
Vovo4ka:

Caras, onde está o erro olha....a então abre várias posições no sinal, e às vezes perde os sinais....a então depois de acionar uma parada ou lucro sobre o par, abre uma nova....

Look.... conditions: cruzamento simultâneo do RSI com os períodos 14 e 17 do nível 30 de baixo para cima e tendência 70 de cima para baixo...


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

      if (diRSI1>70 && diRSI2>70){
         OpenSell();
         return(0);
      }
Eu o faria dessa maneira e também definiria uma parada de compra e não uma venda.
 
todem:
eu o faria dessa maneira e eu definiria uma parada de compra e não uma venda


Ha... seu caminho, com qualquer valor inferior a 30 abre uma!!!!!!! isto é inaceitável.... eu preciso de uma cruz de 30 níveis de baixo para cima!!!!!

e os valores

A1=diRSI1;
      A2=diRSI2;

estes são apenas os valores de RSI da abertura da vela anterior.... eles só têm que ser menos de 30 !!! tudo está correto aqui ... Eu só não entendo porque as trocas são abertas em poucas peças a um sinal!

 
todem:
Eu o faria dessa forma, e seria definido não para comprar imediatamente, mas para bystop e não para vender, mas para selltop
 
Vovo4ka:


Ha... seu caminho qualquer valor inferior a 30 abre uma!!!!!!! isto é inaceitável.... eu preciso de uma cruz de 30 níveis de baixo para cima!!!!!

e os valores

estes são apenas os valores RSI da vela de abertura anterior.... eles só têm que ser menos de 30 !!! tudo está correto aqui ... Eu só não entendo porque as negociações são abertas várias vezes em um sinal !

Se você quiser que ele abra uma negociação, não pode fazê-lo abrir 386, é muito mais rápido do que isso, o que pode executar um milhão de negociações em 1 segundo. O controle da abertura de um comércio é feito através do controle dos negócios abertos. Se você tiver um total de 0 negócios, abra-os e, se não tiver, você está acabado.
 
todem:
Se você quiser que ele abra um negócio, não vai funcionar - é um computador 386, e é muito mais rápido, o que faz um milhão de negócios em 1 segundo. O controle da abertura de um negócio é feito através do controle de negócios abertos. Se você tiver um total de 0 negócios, abra-os e, se não tiver, você está acabado.


Hmmm... esse é o ponto, se houver um milhão de negócios, então o negócio deve ser aberto uma vez....

OK, eu vou descobrir de alguma forma)))) se houver um código para controlar os negócios, me avise...por favor))

 
Vovo4ka:


Hmmm... é essa a questão - se houver um milhão de transações, então a transação deve ser aberta por uma transação...

ok vou descobrir de alguma forma)))) se houver um código para controle de transações, por favor me dê... por favor))

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
  }
aqui está a função
 
todem:
aqui está a função

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

e, neste ponto, em que base se baseia a conclusão de que a ordem aberta é uma venda ou uma compra?

aqui está o código completo acima:

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
  }
 

Aqui eu otimizei seu PSI com meu conselheiro

 
//+------------------------------------------------------------------+
//|                                               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);
}
o que você acha deste conselheiro?