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

 
Max Enrik:

Нижеприведенный код отлично работает после того, как вы мне помогли, спасибо.

И я переименовал, как вы сказали, он работает хорошо, но мне просто интересно, делаю ли я что-то неправильно?
(просто я беспокоюсь
)

Беспокоиться о том, будет ли работать ваш код, очень нормально (более того, это полезно). Часто мы видим код, который компилируется, но не делает того, что мы хотим (из-за человеческой ошибки и/или недостатка знаний).

Лучший способ - взять в привычку распечатывать переменные и проверять коды возврата. После проверки можно убрать операторы печати.

Используя ваш фрагмент кода выше, вы можете добавить простое Print("Значение SL: "+sl), а затем проверить журнал Expert, чтобы убедиться, что значения соответствуют вашим ожиданиям.

 
Max Enrik: просто мне интересно, я что-то делаю не так?
    { sl = Bid + points_to_change( stoploss * 10 ); }
Почему вы умножаете на 10? Если стоплосс в пунктах, конвертируйте его через pips_to_change, чтобы он работал на 4-значных брокерах.
 
Marco vd Heijden:
Все просто, если он работает, как задумано, вы не делаете ничего плохого, иначе он просто не работает.

#Checkmark - Закрыто

Да! Я принимаю этот растровый ярлык уже занял много времени от меня. Наконец, я получил то, что хотел...
Конечно, огромный человек, спасибо за помощь.

Я решил свою проблему следующим образом.

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:

Лучший способ - выработать привычку печатать переменные и проверять коды возврата. После проверки можно убрать операторы печати.
Используя ваш фрагмент кода выше, вы можете добавить простой Print("Значение SL: "+sl), а затем проверить журнал Expert, чтобы убедиться, что значения соответствуют вашим ожиданиям.

Я уже использую это, но иногда я сомневаюсь в своем коде, потому что если вы проверите мойвопрос#Checkmark , я надеюсь, вы поймете меня более ясно.
В
любом случае спасибо за ваше время.

 
whroeder1:
Почему вы умножаете на 10? Если стоплосс в пунктах, конвертируйте его через pips_to_change, чтобы он работал на 4-значных брокерах.

О! Да, хороший вопрос, я уже изменил. Спасибо за внимание.

 

#Stop Loss /Take Profit- закрыто

Спасибо за ваши более четкие комментарии Марко.
Всего вам наилучшего.

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

 

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

Я потратил несколько часов, как я могу найти хорошую документацию об этом, и я не могу получить никакой хорошей информации и документации для этого.
Мне просто нужно, чтобы при нажатии'Left Mouse + Ctrl' размер лота увеличивался на 0.1. (обычно он увеличивается на 0.01 ).

Я хочу найти документацию и статьи с примерами об этом.

Заранее спасибо.

 
Max Enrik:

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

Я потратил несколько часов, как я могу найти хорошую документацию об этом, и я не могу получить никакой хорошей информации и документации для этого.
Мне просто нужно, чтобы при нажатии'Left Mouse + Ctrl' размер лота увеличивался на 0.1. (обычно он увеличивается на 0.01 ).

Я хочу найти документацию и статьи с примерами об этом.

Заранее спасибо.

Я не знаю простого способа отлавливать комбинации клавиш. Было бы лучше иметь вторую кнопку для нажатия, если вы хотите увеличить на 0.1, а не на 0.01.

Тем не менее, вы можете попробовать следующее:

Проверьте, было ли последним событием нажатие клавиши CTRL.

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

Но при таком подходе есть некоторые проблемы:

1. Если между нажатием клавиши и щелчком мыши произойдет любое другое событие графика, этот метод не сработает.

2. Вы получите некоторое превышение, вызванное задержкой между щелчком мыши и отпусканием CTRL. Обходные пути для этого создадут свои собственные проблемы.

Возможно, у других людей появятся идеи получше.

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

Думаю, да.

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

Причина обращения: