assessor especializado - perguntas diversas - página 32

 

( Antes de tentar escrever este comentário, acho que pesquisei muito para encontrar uma solução, sim, encontrei fios semelhantes, mas não encontrei solução para esta questão. )

Eu uso o código abaixo para Ordem de Venda que me mostra Stop Loss em pips, ele me mostra o valor correto até quando o Stop Loss se torna Positivo.
Portanto, não tenho idéia de como posso tentar algo para resolver este problema.

Qualquer bom comentário, seria melhor, por favor.
( nota: por enquanto não estou usando o Trailing Stop. Também abaixo do código apenas para atualizações de informações, não para OrderSend() ou coisas similares. )

if(OrderType()==OP_SELL || (OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP))
  {
   riskinpips=change_to_pips(OrderStopLoss()-OrderOpenPrice());
  }
Print("stop loss in pips",DoubleToString(riskinpips,2));

Obrigado de antemão.

Quando se interrompe a perda em lucros positivos

( nota: etiquetas de captura de tela feitas por programa de edição de fotos para descrever minha edição )
 

Bem, é o valor mais alto menos o valor mais baixo que lhe dá o resultado para que você possa verificar qual deles é o mais alto

if(OrderStopLoss()>OrderOpenPrice())
{
  // orderstoploss - orderopenprice
}

else if(OrderOpenPrice()>OrderStopLoss())
{
  // orderopenprice - orderstoploss
}
 
Marco vd Heijden:

Bem, é o valor mais alto menos o valor mais baixo que lhe dá o resultado para que você possa verificar qual deles é o mais alto

if(OrderStopLoss()>OrderOpenPrice())
{
  // orderstoploss - orderopenprice
}

else if(OrderOpenPrice()>OrderStopLoss())
{
  // orderopenprice - orderstoploss
}

Eu mesmo rindo que não me importo. Acho que isto poderia me ajudar. Em breve eu vou tentar.

Muito obrigado, Sr. Marco

 

#Cálculo da moeda de lucro - Fechado

Funciona perfeitamente até o momento.
Muito obrigado @Marco vd Heijden e @whroeder1

 

#Tempo - Aberto

Desde que comecei a pesquisar sobre Tempo / Relógio para minha EA. Vejo que os autores usam start() JUST em indicador para isso.
Eu uso OnTimer() e OnTick() no meu EA, eu não gostaria de usar start().
Então eu só preciso ter certeza / aprender qual função especial seria melhor para a função Tempo e Relógio?

Continuarei a pesquisar sobre este número 10 horas depois.
( nota: já encontrei poucos indicadores de Tempo e Relógio da página Mql5.com Codebase - mas não gosto de copiar e colar )

Qualquer bom comentário, compartilhamento de fórum, links e outra coisa seria melhor para mim.

Agradecemos antecipadamente.

 

A função de início é substituída pelo OnStart somente em scripts. Em Expert Advisors e indicadores deve ser renomeada para OnTick e OnCalculate, respectivamente. O código que deve ser executado durante uma operação de programa mql5 deve ser localizado nestas três funções:

Ver: https://www.mql5.com/en/docs/migration

Documentation on MQL5: Moving from MQL4
Documentation on MQL5: Moving from MQL4
  • www.mql5.com
Moving from MQL4 - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

A função de início é substituída pelo OnStart somente em scripts. Em Expert Advisors e indicadores deve ser renomeada para OnTick e OnCalculate, respectivamente. O código que deve ser executado durante uma operação de programa mql5 deve ser localizado nestas três funções:

Muito mais obrigado @Marco este comum tão informativo para mim. Eu já li " Passando de MQL4 para MQL5 ".
 
Max Enrik:

#Tempo - Aberto

Desde que comecei a pesquisar sobre Tempo / Relógio para minha EA. Vejo que os autores usam start() JUST em indicador para isso.
Eu uso OnTimer() e OnTick() em minha EA, não gostaria de usar start().
Então eu só preciso ter certeza / aprender qual função especial seria melhor para a função Tempo e Relógio?

Continuarei a pesquisar sobre este número 10 horas depois.
( nota: já encontrei poucos indicadores de Tempo e Relógio da página Mql5.com Codebase - mas não gosto de copiar e colar )

Qualquer bom comentário, compartilhamento de fórum, links e outra coisa seria melhor para mim.

Agradecemos antecipadamente.

Use OnTimer().

O uso do TimeLocal() dará uma melhor aparência, mas não será sincronizado com o fuso horário do corretor.

O uso do TimeCurrent() será sincronizado com seu corretor, mas pode atrasar e depois "pular" segundos, dependendo de quando os ticks chegarem. Este exemplo vai destacar o problema:

#property strict

int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

void OnTimer()
  {
   Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
  }
 

#Tempo - Fechado

honest_knave:

Use OnTimer().
O uso do TimeLocal() dará uma melhor aparência, mas não será sincronizado com o fuso horário do corretor.
O uso de TimeCurrent() será sincronizado com seu corretor, mas pode atrasar e depois "pular" segundos, dependendo de quando os ticks chegarem. Este exemplo vai destacar o problema:

#property strict

int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

void OnTimer()
  {
   Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
  }
Comentário totalmente útil. Muito obrigado, cara.
 

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

assessor especializado - perguntas diversas

honest_knave, 2016.11.30 01:28

IMHO seria melhor se você mantivesse todos os seus cálculos de lote juntos, ao invés de dividi-los entre OnChartEvent() e _lotCalc(). Uma função que verifica min / max / step e faz o incremento / decremento.

void OnChartEvent(const int      id     , // Event ID
                  const long   & lparam , // Parameter of type long event
                  const double & dparam , // Parameter of type double event
                  const string & sparam   // Parameter of type string events
                  )
{
    _lotCalc();
    //-------Process Button---------------------------------------------------------|
    if ( sparam == _btnLotMinus )
    {
        ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
        _lotSize = fmax(_lotMin, _lotSize-_lotStep);
        _calcUpdade( CALC_CHANGE_LOT );
        printf( " | Lot: %.2f  ", _lotSize );
        return;
    }   //---if Close
    //                          ...
}

void _lotCalc()
{
    //---
    _lotMin  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MIN  );
    _lotMax  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MAX  );
    _lotStep = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_STEP );

    //---
}

#Passo de lote - ReOpen

@honest_knave- obrigado por sua maior ajuda sobre Tamanho de Lote e Passo de Lote.

Portanto, eu só preciso melhorar esta parte do código para quando " Lot Size >= ( Lot Step * 100 ) " esse Lot Step aumentar em " Lot Step * 100 ".

// lot plus
if(sparam==lotbuttonplus)
  {
   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? lotstep*10 : lotstep));

// global variable
   infoupdate();

   printf("Lot: %.2f ",lotsize);
   ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
   return;
  }

Obrigado antecipadamente.

Razão: