[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 121

 
mahla:

onde adicionar a parada de arrasto e a saída de equilíbrio ? e não aumenta o lote quando você aumenta o depósito

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

No conselheiro

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

função aumento do lote...... é provavelmente melhor mudar

exemplo:

extern double Lots               = 0.1;
extern double MaximumRisk        = 0.02;
extern double DecreaseFactor     = 3;
//////
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//---- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
         //----
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//---- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }

Veja em Moving Average.mq4

 

Você pode me dizer como usar as fitas de bollinger para o momentum, não para o preço? Eu tentei desta forma:

BandOPeriodT - variável externa, período de bandas de bollinger.

MomentumPeriodT - período de momentum, respectivamente.

BandOBottom=iBands (NULL,0,BandOPeriodT,1,0,iMomentum(NULL,0,MomentumPeriodT,PRICE_OPEN,0),MODE_LOWER,0);

e também assim:

MomO=iMomentum(NULL,0,MomentumPeriodT,PRICE_OPEN,0); - variável interna que retorna o valor

BandOBottom=iBands(NULL,0,BandOPeriodT,1,0,MomO,MODE_LOWER,0); - a variável deve retornar o valor da linha inferior do Bollinger para o valor da variável anterior.

Também, estou certo ao assumir que MODE_LOWER significa que recebo o valor de BOLLINGER BOLLINGER em uma variável? Se não, como posso obtê-lo exatamente?

 
Ovari:

Você pode me dizer como usar as fitas de bollinger para o momentum, não para o preço? Eu tentei desta forma:

BandOPeriodT - variável externa, período de bandas de bollinger.

MomentumPeriodT - período de momentum, respectivamente.

BandOBottom=iBands (NULL,0,BandOPeriodT,1,0,iMomentum(NULL,0,MomentumPeriodT,PRICE_OPEN,0),MODE_LOWER,0);

e também assim:

MomO=iMomentum(NULL,0,MomentumPeriodT,PRICE_OPEN,0); - variável interna que retorna valor

BandOBottom=iBand(NULL,0,BandOPeriodT,1,0, MomO,MODE_LOWER,0); - a variável deve retornar o valor da linha inferior do Bollinger para o valor da variável anterior.

Além disso, estou certo ao pensar que MODE_LOWER significa que recebo o valor de Bollinger BOW em uma variável? Se não, como posso obtê-lo exatamente?


Veja trailer - ali Bandas para RSI - faça o mesmo para Momentum.

Descrição - no log - ver código no início.

Arquivos anexados:
 
Obrigado, porque sou muito novo, e também não sou muito programador:)
 

Olá! Por favor, ajudem! Eu quero tentar o indicador PVT:

double PVT = iCustom(NULL,240,"PVT",PRICE_CLOSE,1,1)

Você pode me dizer o que está faltando?

Diz: 2012.05.14 19:34:46 Não é possível abrir o arquivo 'C:\Program Files\Alpari NZ MT4\experts\PVT.ex4' no EURUSD,H4

Obrigado!

 
mahla:

onde adicionar a parada de arrasto e a saída de equilíbrio ? e não aumenta o lote quando você aumenta o depósito

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int Buy (int StopLoss = 0, int TakeProfit = 0, double Lot = 0)

{

int Ticket = 0;

duplo SL = 0;

duplo TP = 0;

duplo VolumeLot = 0;

RefreshRates();

se (StopLoss != 0)

SL = NormalizeDouble(Bid-StopLoss*Point, Dígitos);

se (TakeProfit != 0)

TP = NormalizeDouble(Ask+TakeProfit*Point, Dígitos);

se (Lote == 0)

VolumeLot = GetLot ();

senão

VolumeLot = Lote;

Ticket = OrderSend(Symbol(), OP_BUY, VolumeLot, NormalizeDouble(Ask, Digits), 20, SL, TP, NULL, AccountNumber(), 0, Green);

se (Bilhete == -1)

{

retorno (GetLastError ();

}

senão

{

retorno (bilhete);

}

}

int Sell (int StopLoss = 0, int TakeProfit = 0, double Lot = 0)

{

int Ticket = 0;

duplo SL = 0;

duplo TP = 0;

duplo VolumeLot = 0;

RefreshRates();

se (StopLoss != 0)

SL = NormalizeDouble(Ask+StopLoss*Point, Dígitos);

se (TakeProfit != 0)

TP = NormalizeDouble(Bid-TakeProfit*Point, Dígitos);

se (Lote == 0)

VolumeLot = GetLot ();

senão

VolumeLot = Lote;

Ticket = OrderSend(Symbol(), OP_SELLL, VolumeLot, NormalizeDouble(Bid, Digits), 20, SL, TP, NULL, AccountNumber(), 0, Vermelho);

se (Bilhete == -1)

retorno (GetLastError ();

senão

retorno (bilhete);

}

duplo GetLot ()

{

int lot;

se (AccountBalance()>=300) lote=0,01;

se (AccountBalance()>=500) lote=0,02;

se (AccountBalance()>=800) lote=0,03;

retornar (lote);

}

Vamos assumir que a posição aberta já foi selecionada e sabemos com certeza que esta posição está aberta
para o símbolo ao qual o Expert Advisor está anexado. Assumir também que o valor da trailing stop
em pips está contido na variável TrailingStop.

   int err;
   if (OrderType() == OP_BUY)
     {
       // позиция на покупку
       if ((Bid-OrderOpenPrice())>=(TrailingStop*Point))
         {
           // выставляем Stop Loss
           if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid-TrailingStop*Point,
                                    OrderTakeProfit(), 0))
             Print("#", OrderTicket(),": trailing stop ", Bid-TrailingStop*Point);
           else
             {
              err = GetLastError();
              Print("#", OrderTicket(),": trailing stop error ", err);
             }
         }
     }
   else
     {
       // позиция на продажу
       if ((OrderOpenPrice()-Ask)>=(TrailingStop*Point))
         {
           // выставляем Stop Loss
           if (OrderModify(OrderTicket(), OrderOpenPrice(), Ask+TrailingStop*Point,
                                    OrderTakeProfit(), 0))
             Print("#", OrderTicket(),": trailing stop ", Ask+TrailingStop*Point);
           else
             {
              err = GetLastError();
              Print("#", OrderTicket(),": trailing stop error ", err);
             }
         }
     }
A função OrderProfit() retorna o lucro da ordem selecionada usando a função OrderSelect().

Suponhamos que queremos calcular o lucro que obtivemos com posições fechadas.

   int profit = 0;
   int pos;
   for ( pos = 0; pos<HistoryTotal(); pos++ )
     {
       // выделим позицию
       if (OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY) == true)
         {
           // это не отложенный ордер?
           if ( OrderType() <= OP_SELL) profit += OrderProfit();            
         }
       else
           Print("Ошибка ", GetLastError(), " при выделении ордера ", OrderTicket());
     }
   Print("Суммарный профит по закрытым позициям = ", profit);
E o código completo que calcula o lucro para todas as posições fechadas,
que estão abertas hoje, será:

   //---- вычислим начало дня - переменная day_start
   int c_time = CurTime();  
   datetime day_start;
   day_start=c_time-TimeHour(c_time)*60*60-TimeMinute(c_time)*60-TimeSeconds(c_time);
   //---- подсчитаем прибыль
   int profit = 0;
   int pos;
   for ( pos = 0; pos<HistoryTotal(); pos++ )
     {
       // выделим позицию
       if (OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY) == true)
         {
           // это не отложенный ордер?
           if ( OrderType() <= OP_SELL)
             {
               // ордер был открыт сегодня?
               if (OrderOpenTime()>=day_start) profit += OrderProfit();
             }
         }
       else
           Print("Ошибка ", GetLastError(), " при выделении ордера ", OrderTicket());
     }
   Print("Суммарный профит по закрытым позициям = ", profit);
 
mahla:

? e não aumenta o tamanho do lote quando você aumenta o depósito

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Talvez falte algo mais no código:

duplo OrderLots( )
Devolve o número de lotes para a ordem selecionada.
A ordem deve ser pré-selecionada usando OrderSelect().
Exemplo:
 if(OrderSelect(10,SELECT_BY_POS)==verdadeiro) Print("lotes para o pedido 10 ",OrderLots()); caso contrário Print("OrderSelect() retornou um erro - ",GetLastError());
 
borilunad:

Olá! Por favor, ajudem! Eu quero tentar o indicador PVT:

Você pode me dizer o que está faltando?

Diz: 2012.05.14 19:34:46 Não é possível abrir o arquivo 'C:\Program Files\Alpari NZ MT4\experts\PVT.ex4' no EURUSD,H4

Obrigado!

O próprio indicador PVT está faltando (você tem certeza de que tem um?).
 
alsu:
O próprio indicador PVT está faltando (você tem certeza de que tem um?).

É claro que o tenho e é compilado e eh4. E colocá-lo também na tabela. Talvez eu tenha escrito algo errado? Obrigado!
 

borilunad:

É claro, há tanto o compilado como o eh4. E colocá-lo na tabela. Talvez eu tenha escrito algo errado? Obrigado!


Só tem UM buffer, para que serve um EA chamar um segundo buffer inexistente???