consulente esperto - domande varie - pagina 12

 
Marco vd Heijden:

Credo di sì.

È leggermente diverso però.

Il globale contro lo statico non è né qui né là. Ma il tuo metodo di reset è buono. Previene l'overrun.
 
honest_knave:
Il globale contro lo statico non è né qui né lì. Ma il tuo metodo di reset è buono. Previene l'overrun.

Ho parlato troppo presto. Il tuo supera l'altro modo. Si innesca su una successiva pressione di CTRL. Se clicchi sul grafico e poi premi CTRL si attiva.

 

@honest_knave- grazie per il tuo commento. Lo apprezzo molto - ma ho iniziato a provare prima il commento di @Marco vd Heijden. ( Ho letto tutti i vostri commenti su questo. )

@Marco vd Heijden- Grazie amico.

Ma penso che sto facendo qualcosa di sbagliato, forse non capisco più chiaramente. Comunque ho provato, puoi trovare il codice qui sotto.
Dov'è il mio errore, per favore?

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

string prefix = "Custom Expert |";
string lotedit = prefix + "Edit Name";
string lotbtnplus = prefix + "Lot button Plus";
string lotbtnminus = prefix + "Lot button Minus";

double lot = 0.01, lotstep = 0.01 ;
bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
   EventSetTimer(60);

   graphicsObj();

//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
    EventKillTimer();
    ObjectsDeleteAll( 0, prefix );
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//---
    graphicsObj();
}
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---

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

    if( id == CHARTEVENT_CLICK )
    {
        if ( sparam == lotbtnplus )
        {
            ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
            lot = lot + lotstep;
            update();

            Print( " | lot plus :  ", lot );
            return;
        }

        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
                if ( sparam == lotbtnplus )
                {
                    ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
                    lot = lot + ( lotstep * 10 );
                    Print( " | lot plus + Ctrl initial:  ", lot );
                    update();

                    Print( " | lot plus + Ctrl:  ", lot );
                    return;
                }
                Print( "Ctrl + Click" );
                ctrl_click = 0;  // reset
            }
        }
        ctrl_click = 0; // reset if not ctrl
    }
}

//|+--------------------------------------------------------------------------------+
//| -   Function Update                                                             |
//|+--------------------------------------------------------------------------------+
void update()
{
    //---
    ObjectSetString( 0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 ) );
    //---
    return;
}
void graphicsObj()
{
    ObjectCreate(0, lotedit, OBJ_EDIT, 0,0,0);
    ObjectSetInteger(0, lotedit, OBJPROP_XDISTANCE, 30);
    ObjectSetInteger(0, lotedit, OBJPROP_YDISTANCE, 30);
    ObjectSetInteger(0, lotedit, OBJPROP_XSIZE, 60);
    ObjectSetInteger(0, lotedit, OBJPROP_YSIZE, 30);
    ObjectSetString(0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 ));

    ObjectCreate( 0, lotbtnplus, OBJ_BUTTON, 0, 0, 0);
    ObjectSetString( 0, lotbtnplus, OBJPROP_TEXT, "+");
    ObjectSetInteger( 0, lotbtnplus, OBJPROP_XDISTANCE, 100);
    ObjectSetInteger( 0, lotbtnplus, OBJPROP_YDISTANCE, 30);
    ObjectSetInteger( 0, lotbtnplus, OBJPROP_XSIZE, 70);
    ObjectSetInteger( 0, lotbtnplus, OBJPROP_YSIZE, 30);
    ObjectSetInteger( 0, lotbtnplus, OBJPROP_BACK, false);
    ObjectSetInteger( 0, lotbtnplus, OBJPROP_SELECTABLE, false);
}
 

Il tuo primo problema è che CHARTEVENT_CLICK non è la stessa cosa di CHARTEVENT_OBJECT_CLICK. Tu vuoi catturare i clic su un oggetto, non un qualsiasi clic sul grafico.

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

//    if( id == CHARTEVENT_CLICK )
    if( id == CHARTEVENT_OBJECT_CLICK )
 
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   static bool wasCTRL=false;
   if(id==CHARTEVENT_OBJECT_CLICK && sparam == lotbtnplus)
     {
      ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
      lot+=(wasCTRL)?lotstep*10:lotstep;
      update();
      Print( " | lot plus :  ", lot );
      return;
     }
   wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==17);
}
Questo può aiutare. Potreste scoprire che va a 0,1 solo al secondo clic del mouse, a seconda di quanto velocemente premete il pulsante dopo CTRL.
 
honest_knave:
Questo può aiutare. Potresti scoprire che va a 0,1 solo al secondo clic del mouse, a seconda di quanto velocemente premi il pulsante dopo CTRL.

#Ctrl + pulsante del mouse - Chiuso

Wow, proprio così, incredibile enorme grazie onesto!

Ringraziamenti speciali a@honest_knave e @Marco vd Heijden

 
#SpreadSheet - Aperto

L'ultimo Venerdì'Spreadsheet' è stato aggiornato dalla funzione OnTick (di cui ho bisogno, era buona per me).

(La piattaforma MT4 si è aggiornata due volte.) Dopo gli aggiornamenti questo foglio di calcolo non si aggiorna sul grafico, ho controllato tutto ciò che riguarda il foglio di calcolo e non vedo alcun problema.

Devo informare che uso anche i prezzi Bid e Ask sopra il foglio di calcolo, Bid e Ask funzionano bene, ma il foglio di calcolo no.

Quindi uso la funzione Label per gli oggetti Label - ogni oggetto Label funziona bene senza 'Spreadsheet'. Devo anche informare che quando creo l'oggetto Label per il foglio di calcolo senza la funzione, funziona bene.
Questo problema inizia dopo l'aggiornamento della piattaforma MT4, non sono sicuro da dove venga questo problema.

Se capite la mia preoccupazione, fatemi sapere come posso risolvere questo problema.
Grazie in anticipo.

 

Hai del codice sul foglio di calcolo?

 
Marco vd Heijden:

Hai del codice sul foglio di calcolo?

Sto ancora facendo delle ricerche su questo, e presto posterò anche del codice, che funziona e che non funziona.
 

Posso scrivere 2 diverse Label Function?
(ad esempio: 1 per il testo, 2 per il testo e la dimensione del carattere).

Motivazione: