asesor experto - preguntas varias - página 11

 
Max Enrik:

El siguiente código funciona perfectamente después de que me ayudaste, gracias hombre.

Y he cambiado el nombre como usted dijo, funciona bien, pero sólo me pregunto, estoy haciendo algo mal?
( solo me preocupa)

Preocuparse por si su código va a funcionar es muy normal (de hecho es saludable). Con frecuencia veremos código que compila pero no hace lo que queremos (por error humano y/o falta de conocimiento).

Lo mejor es acostumbrarse a imprimir las variables y comprobar los códigos de retorno. Una vez que hayas probado, puedes eliminar las sentencias de impresión.

Usando tu fragmento de código anterior, podrías añadir un simple Print("Valor SL: "+sl) y luego comprobar tu registro de Expertos para ver si los valores son los esperados.

 
Max Enrik: Sólo me pregunto, ¿estoy haciendo algo mal?
    { sl = Bid + points_to_change( stoploss * 10 ); }
¿Por qué estás multiplicando por 10? Si el stoploss está en pips, conviértelo mediante pips_to_change para que funcione en brokers de 4 dígitos.
 
Marco vd Heijden:
Es sencillo, si funciona como está diseñado no estás haciendo nada mal, de lo contrario simplemente no funciona.

#Marca de verificación - Cerrado

¡Si! Acepto que esta etiqueta de mapa de bits ya me llevó mucho tiempo. Finalmente, tengo lo que quiero...
Por supuesto, enorme hombre, gracias por su ayuda.

Yo resuelvo mi problema como el código de abajo.

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:

Lo mejor es acostumbrarse a imprimir las variables y comprobar los códigos de retorno. Una vez que haya probado, puede eliminar las declaraciones de impresión.
Usando tu fragmento de código anterior, podrías añadir un simple Print("Valor SL: "+sl) y luego comprobar tu registro de Expertos para ver si los valores son los esperados.

Yo ya lo uso, pero a veces dudo de mi código porque si revisas mi tema de#Checkmark , espero que me entiendas mejor.
De todas formas
gracias por tu tiempo.

 
whroeder1:
¿Por qué estás multiplicando por 10? Si el stoploss está en pips, conviértelo mediante pips_to_change para que funcione en brokers de 4 dígitos.

¡Oh! Sí hombre, buena pregunta, ya he cambiado. Gracias por tu atención.

 

#Stop Loss /Take Profit- Cerrado

Gracias por tus comentarios más claros Marco.
Todo lo mejor para ti.

Un agradecimiento especial a @Marco vd Heijden

 

#Ctrl + Botón del ratón - Abrir

Pasé algunas horas, ¿cómo puedo encontrar una buena documentación sobre eso, y no puedo conseguir ninguna buena información y documentación para ello.
Sólo necesito cuando hago clic en'Left Mouse + Ctrl' para aumentar el tamaño del lote en 0,1. ( normalmente se incrementa en 0.01 ).

Quiero encontrar documentación y artículos con ejemplo sobre eso.

Gracias de antemano.

 
Max Enrik:

#Ctrl + Botón del ratón - Abrir

Pasé algunas horas, ¿cómo puedo encontrar una buena documentación sobre eso, y no puedo conseguir ninguna buena información y documentación para ello.
Sólo necesito cuando hago clic en'Left Mouse + Ctrl' para el aumento del tamaño del lote en 0,1. ( normalmente se incrementa en 0.01 ).

Quiero encontrar documentación y artículos con ejemplo sobre eso.

Gracias de antemano.

No conozco una forma fácil de atrapar las combinaciones de teclas. Sería mejor tener un segundo botón para pulsar si quieres aumentar en 0,1 en lugar de 0,01.

Sin embargo, puedes probar lo siguiente:

Compruebe si el último evento fue una pulsación de tecla CTRL.

Si lo fue, compruebe si este evento es un clic de ratón.

Pero, hay algunos problemas con este enfoque:

1. Si cualquier otro evento del gráfico ocurre entre la pulsación de la tecla y el clic del ratón, falla.

2. 2. Se producirá una sobrecarga causada por el retraso entre el clic del ratón y la liberación de CTRL. Las soluciones a esto introducirán sus propios problemas.

Quizás otras personas tengan mejores ideas.

#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
     }
  }
//+------------------------------------------------------------------+
 

Supongo que sí.

Sin embargo, es ligeramente diferente.