assessor especializado - perguntas diversas - página 11

 
Max Enrik:

O código abaixo funciona perfeitamente depois que você me ajudou, obrigado homem.

E eu renomeei como você disse, funciona bem, mas só estou me perguntando, estou fazendo algo errado?
( só estou me preocupando)

Preocupar-se se seu código vai funcionar é muito normal (na verdade, é saudável). Frequentemente veremos códigos que compilam mas não fazem o que queremos (por causa de erro humano e/ou falta de conhecimento).

A melhor maneira é adquirir o hábito de imprimir variáveis e verificar códigos de retorno. Uma vez que você tenha testado, você pode remover as declarações de impressão.

Usando seu trecho de código acima, você poderia adicionar uma simples impressão ("valor SL: "+sl") e então verificar seu registro de especialista para ver se os valores são os que você espera.

 
Max Enrik: só estou me perguntando: estou fazendo algo errado?
    { sl = Bid + points_to_change( stoploss * 10 ); }
Por que você está se multiplicando por 10? Se o stoploss está em pips, converta-o via pips_to_change para que funcione em corretores de 4 dígitos.
 
Marco vd Heijden:
É simples, se funcionar como projetado, você não faz nada de errado, senão simplesmente não funciona.

#Checkmark - Fechado

Sim! Aceito esta etiqueta de bitmap já demorou muito tempo de minha parte. Finalmente, eu tenho o que quero...
Claro, grande homem, obrigado por sua ajuda.

Eu resolvo meu problema como abaixo do código.

void ordersell()
{
    //  Sell set Stop Loss with bitmap label
    
    // when bitmap label shows - ON
    if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == true )
    {
        sl = Bid + points_to_change( stoploss * 10 );
        Print( " | TRUE :  Active | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl );
    }

    // when bitmap label shows - OFF
    if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == false )
    {
        sl = 0;
        Print( " | FALSE :  Inactive | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl );
    }

    // call your stop loss 'sl'
    ticket = OrderSend( ..., sl, ... );
    // sounds
    if ( ticket > 0 )
    { PlaySound( "ok.wav"      ); } else
    { PlaySound( "timeout.wav" ); }
    return;
}
 
honest_knave:

A melhor maneira é adquirir o hábito de imprimir variáveis e verificar códigos de retorno. Uma vez testados, é possível remover as declarações de impressão.
Usando seu trecho de código acima, você poderia adicionar uma simples impressão ("valor SL: "+sl") e então verificar seu registro de especialista para ver se os valores são os que você espera.

Eu já o uso, mas às vezes duvido do meu código porque se você verificar minhaquestão#Checkmark , espero que você me entenda mais claramente.
De qualquer forma,
obrigado pelo seu tempo.

 
whroeder1:
Por que você está se multiplicando por 10? Se o stoploss está em pips, converta-o via pips_to_change para que funcione em corretores de 4 dígitos.

Ah! sim, cara, boa pergunta, eu já mudei. Obrigado por sua atenção.

 

#Parar Perdas /Tirar Lucro- Fechado

Obrigado por seus comentários mais claros, Marco.
Tudo de bom para você.

Agradecimentos especiais a @Marco vd Heijden

 

#Ctrl + Botão do Mouse - Aberto

Passei poucas horas, como posso encontrar boa documentação sobre isso, e não consigo encontrar nenhuma boa informação e documentação para isso.
Só preciso quando clico em'Rato esquerdo + Ctrl' para aumentar o tamanho do lote em 0,1. ( normalmente aumenta em 0,01 ).

Eu quero encontrar documentação e artigos com exemplos sobre isso.

Obrigado antecipadamente.

 
Max Enrik:

#Ctrl + Botão do Mouse - Aberto

Passei poucas horas, como posso encontrar boa documentação sobre isso, e não consigo ter nenhuma boa informação e documentação para isso.
Só preciso quando clico em'Rato esquerdo + Ctrl' para aumentar o tamanho do lote em 0,1. ( normalmente aumenta em 0,01 ).

Eu quero encontrar documentação e artigos com exemplos sobre isso.

Obrigado antecipadamente.

Não sei de uma maneira fácil de apanhar combinações de teclas. Seria melhor ter um segundo botão para clicar se você quiser aumentar em 0,1 em vez de 0,01.

No entanto, você pode tentar o seguinte:

Verifique se o último evento foi uma tecla CTRL.

Se foi, verifique se este evento é um clique do mouse.

Mas, há alguns problemas com esta abordagem:

1. Se qualquer outro evento gráfico acontecer entre o pressionamento de tecla e o clique do mouse, ele falha.

2. Você terá alguma sobrecarga causada pelo atraso entre o clique do mouse e a liberação da CTRL. As soluções para isto introduzirão seus próprios problemas.

Talvez algumas outras pessoas tenham idéias melhores.

#define CTRL 17

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   static bool wasCTRL=false;
   if(wasCTRL && id==CHARTEVENT_CLICK) Print("CTRL+CLICK detected");
   wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==CTRL);
  }
 
//+------------------------------------------------------------------+
//|                                                      keydown.mq4 |
//|      Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---

  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

   if(id==CHARTEVENT_CLICK)
     {
      //Print("CLICK");
      ctrl_click=1;
     }

   if(id==CHARTEVENT_KEYDOWN)
     {
      //Print(lparam);// print to identify keycode

      if(lparam==17)  // ctrl key
        {
         if(ctrl_click==1)// if mouse click
           {
            //Do Something when CTRL (keycode 17) is pressed
            Print("CTRL+CLICK");
            ctrl_click=0;  // reset
           }
        }
       ctrl_click=0; // reset if not ctrl
     }
  }
//+------------------------------------------------------------------+
 

Acho que sim.

É um pouco diferente tho.