советник - разные вопросы - страница 12

 
Marco vd Heijden:

Думаю, да.

Это немного другое.

Глобальное против статического - это не здесь и не там. Но ваш метод сброса хорош. Он предотвращает превышение.
 
honest_knave:
Глобальное против статического - это не здесь и не там. Но ваш метод сброса хорош. Он предотвращает превышение.

Я заговорил слишком рано. Ваш переходит в другую сторону. Он сработает при последующем нажатии CTRL. Если вы щелкните на графике, а затем нажмете CTRL, он сработает.

 

@honest_knave- спасибо за ваш комментарий. Я очень ценю это - но я начал пробовать сначала комментарий @Marco vd Heijden. (Я прочитал все ваши комментарии по этому поводу).

@Marco vd Heijden- Спасибо.

Но мне кажется, я делаю что-то не так, может быть, я не понимаю более четко. В любом случае я попробовал, вы можете найти его ниже код.
Где моя ошибка, пожалуйста?

//+------------------------------------------------------------------+
//|                                                      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);
}
 

Ваша первая проблема заключается в том, что CHARTEVENT_CLICK - это не то же самое, что CHARTEVENT_OBJECT_CLICK. Вы хотите перехватить щелчки на объекте, а не просто любой щелчок на графике.

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);
}
Это может помочь. Вы можете обнаружить, что он переходит к 0,1 только на втором щелчке мыши, в зависимости от того, как быстро вы нажимаете кнопку после CTRL.
 
honest_knave:
Это может помочь. Вы можете обнаружить, что он переходит к 0.1 только на втором щелчке мыши, в зависимости от того, как быстро вы нажимаете кнопку после CTRL.

#Ctrl + кнопка мыши - закрыто

Вау, просто как это, удивительно огромное спасибо честное слово!

Особая благодарность@honest_knave и @Marco vd Heijden.

 
#SpreadSheet - Open

В последнюю пятницу'Spreadsheet' был обновлен функцией OnTick (которая мне нужна, это было хорошо для меня).

(Платформа MT4 обновлялась дважды.) После этого обновления эта таблица не обновляется на графике, я проверил все о таблице и не вижу никаких проблем.

Должен сообщить, что я также использую цены Bid и Ask над таблицей, Bid и Ask работают хорошо, но таблица не работает.

Поэтому я использую функцию Label Function для объектов Label - все объекты Label работают хорошо без 'Spreadsheet'. Также я должен сообщить, что когда я создаю объект Label для электронной таблицы без функции, он работает хорошо.
Эта проблема начинается после обновления платформы MT4, я не уверен, где эта проблема возникает.

Если вы понимаете, что меня беспокоит, сообщите мне, как я могу решить эту проблему.
Заранее спасибо.

 

Есть ли у вас какой-нибудь код об электронной таблице?

 
Marco vd Heijden:

Есть ли у вас какой-нибудь код об электронной таблице?

Я все еще изучаю этот вопрос, также я скоро выложу несколько кодов из него, которые работают, которые нет.
 

Могу ли я написать 2 разные функции Label Function?
(например: 1 для текста, 2 для текста и размера шрифта).