consulente esperto - domande varie - pagina 11

 
Max Enrik:

Il codice qui sotto funziona perfettamente dopo che mi hai aiutato, grazie amico.

E ho rinominato come hai detto tu, funziona bene, ma mi sto solo chiedendo, sto facendo qualcosa di sbagliato?
(sono solo preoccupato)

Preoccuparsi se il tuo codice funzionerà è molto normale (anzi è salutare). Spesso vedremo del codice che si compila ma non fa quello che vogliamo (a causa dell'errore umano e/o della mancanza di conoscenza).

Il modo migliore è prendere l'abitudine di stampare le variabili e controllare i codici di ritorno. Una volta che avete testato, potete rimuovere le dichiarazioni di stampa.

Usando il vostro frammento di codice qui sopra, potreste aggiungere una semplice Print("SL value: "+sl) e poi controllare il vostro Expert log per vedere se i valori sono quelli che vi aspettate.

 
Max Enrik: Mi sto solo chiedendo: sto facendo qualcosa di sbagliato?
    { sl = Bid + points_to_change( stoploss * 10 ); }
Perché stai moltiplicando per 10? Se lo stoploss è in pip, convertilo tramite pips_to_change in modo che funzioni su broker a 4 cifre.
 
Marco vd Heijden:
È semplice, se funziona come progettato non stai facendo nulla di sbagliato, altrimenti semplicemente non funziona.

#Checkmark - Chiuso

Si! Accetto che questa etichetta bitmap abbia già richiesto molto tempo da parte mia. Finalmente ho ottenuto quello che voglio...
Certo, enorme uomo, grazie per il tuo aiuto.

Risolvo il mio problema come il codice qui sotto.

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:

Il modo migliore è prendere l'abitudine di stampare le variabili e controllare i codici di ritorno. Una volta che avete testato, potete rimuovere le istruzioni di stampa.
Usando il vostro snippet di codice sopra, potreste aggiungere una semplice Print("SL value: "+sl) e poi controllare il vostro Expert log per vedere se i valori sono quelli che vi aspettate.

Lo uso già, ma a volte dubito del mio codice perché se controlli il mioproblema#Checkmark , spero che mi capirai più chiaramente.
Comunque
grazie per il tuo tempo.

 
whroeder1:
Perché stai moltiplicando per 10? Se lo stoploss è in pip, convertilo tramite pips_to_change in modo che funzioni su broker a 4 cifre.

Oh! Sì amico, buona domanda, ho già cambiato. Grazie per l'attenzione.

 

#Stop Loss /Take Profit- Chiuso.

Grazie per i tuoi commenti più chiari Marco.
Tutto il meglio per te.

Un ringraziamento speciale a @Marco vd Heijden

 

#Ctrl + pulsante del mouse - Apri.

Ho trascorso alcune ore, come posso trovare una buona documentazione su questo, e non posso ottenere alcuna buona informazione e documentazione per questo.
Ho solo bisogno che quando clicco'Left Mouse + Ctrl' la dimensione del lotto aumenti di 0.1. (normalmente è aumentato di 0.01 ).

Voglio trovare documentazione e articoli con esempi su questo.

Grazie in anticipo.

 
Max Enrik:

#Ctrl + pulsante del mouse - Apri.

Ho trascorso alcune ore, come posso trovare una buona documentazione su questo, e non posso ottenere alcuna buona informazione e documentazione per questo.
Ho solo bisogno che quando clicco'Left Mouse + Ctrl' la dimensione del lotto aumenti di 0.1. (normalmente aumenta di 0.01 ).

Voglio trovare documentazione e articoli con esempi su questo.

Grazie in anticipo.

Non conosco un modo semplice per intrappolare le combinazioni di tasti. Sarebbe meglio avere un secondo pulsante da cliccare se si vuole aumentare di 0,1 piuttosto che di 0,01.

Ciononostante, puoi provare quanto segue:

Controllate se l'ultimo evento era una pressione del tasto CTRL.

Se lo era, controllate se questo evento è un clic del mouse.

Ma ci sono alcuni problemi con questo approccio:

1. Se qualsiasi altro evento del grafico accade tra la pressione del tasto e il clic del mouse, fallisce.

2. Si otterrà un po' di overrun causato dal ritardo tra il clic del mouse e il rilascio di CTRL. I workaround per questo introdurranno i loro propri problemi.

Forse altre persone avranno idee migliori.

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

Credo di sì.

È leggermente diverso però.

Motivazione: