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

 

MQL4:

MODE_LOTSTEP

24

Шаг для изменения лотов


Print("Step for changing lots=",MarketInfo(Symbol(),MODE_LOTSTEP));

MQL5:

ШАГ_ОБЪЕМА_СИМВОЛА

Минимальный шаг изменения объема для совершения сделки

двойной


Print(" Step: ",SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

Таким образом, он информирует вас о минимальном шаге увеличения или уменьшения размера лота, если он равен 0,01, то ваши лоты должны соответствовать 0,01, 0,02, 0,03, 0,04 и т. д.

Если это 0.1, то ваше изменение размера лота должно соответствовать 0.1, затем 0.2, затем 0.3 и т.д.

Поэтому я не понимаю вас:

   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

Может быть, вы имеете в виду другой шаг лота?

Обычно вы не меняете это значение, потому что оно фиксировано для каждого символа.

 
Max Enrik:
// lot plus
if(sparam==lotbuttonplus)
  {
   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

Все может запутаться, если вы измените значение переменной с интуитивным названием. Я бы предложил, чтобы lotstep всегда была lotstep и ничем другим.

Как насчет чего-то вроде этого?

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
Edit: извините, только что увидел ответ Марко. Я согласен насчет именования lotstep.
 

Marco vd Heijden:

Поэтому я не понимаю вас:

   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

Может быть, вы имеете в виду другой шаг лота?
Обычно вы не меняете это значение, потому что оно фиксировано для каждого символа.

Да! Я имею в виду другой шаг лота, то есть когда размер лота достиг размера лота 1.00 для EURUSD. Тогда мне нужно увеличить размер лота на 1.00. До того, как размер лота достигнет 1.00 - размер лота увеличивается на 0.01, 0.02 и т.д. (какой я хочу) - но после того, как размер лота достиг 1.00 - тогда размер лота увеличивается на 1.00, 2.00, 3.00 и т.д.
Это то, что я хочу сделать в этой подтеме.

Большое спасибо.

 
honest_knave:

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

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
Edit: извините, только что увидел ответ Марко. Я согласен насчет именования lotstep.

( Я просто немного изменил не - ... ? lotstep : lotstep*100 - ...? lotstep : lotstep*10 )

Да! В моем первоначальном коде все перепуталось.
После вашей большой помощи я решил свою проблему. Большое спасибо.

Также я хотел бы, чтобы размер лота увеличивался следующим образом.
Размер лота увеличивается следующим образом 0.99, 1.00, 1.01, 1.11.
Но мне нужно вот так 0.99, 1.00, 1.10, 1.20 и т.д.

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

 

Я думаю, что 0.99, 1.00, 1.01, 1.02. будет лучшей идеей.

Придерживайтесь наименьшего доступного шага, я думаю.

Почему вы хотите делать эти УЛЬТРА БОЛЬШИЕ шаги?

Вы уже пробовали?

Пожалуйста, попробуйте.
 
Marco vd Heijden:

Я думаю, что 0.99, 1.00, 1.01, 1.02. будет лучшей идеей.
Придерживайтесь наименьшего доступного шага, я думаю.
Почему вы хотите делать такие УЛЬТРА БОЛЬШИЕ шаги?
Вы пробовали?

Пожалуйста, попробуйте.

Я уже пробовал, думаю, если мне нужно достичь размера лота 5.00, я должен 40 раз нажать кнопку лот плюс ( + ctrl ).

 

Ничего себе, и почему пять?

Вы можете просто использовать + и - вместо *

lotsize=lotsize+0.1;
lotsize=lotsize-0.1;

Но в моем роботе есть одна строка, которая спасает его от полного уничтожения, и это она:

static input double lotsmax=1;// Max Lots (please respect the setting)
 
Marco vd Heijden:

Но в моем роботе есть одна строчка, которая спасает его от полного уничтожения, и это она:

Это абсолютно верно, и, конечно, я уважаю эту установку.

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

Я думаю, что эту подтему можно пока закрыть.

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

#Lot Step - закрыто

 

#Lot Size Max - Open

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

Итак, как обычно я пытаюсь протестировать что-то на максимальный размер лота.
Когда размер лота больше максимального, функция печати не дает мне знать о режиме торговли.
После того, как я решу этот вопрос, мне нужно поставить эту функцию на кнопки Sell и Buy.

Вопрос: Как я могу сделать так, чтобы функция печати не сообщала мне о режиме торговли? ( - размер лота лучше, чем размер лота max или меньше, чем он)
В: Полезен ли этот метод для максимального размера лота?

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

void example()
  {
   string trademode;
   ENUM_ACCOUNT_TRADE_MODE accounttype=(ENUM_ACCOUNT_TRADE_MODE) AccountInfoInteger(ACCOUNT_TRADE_MODE);

   if(accounttype==ACCOUNT_TRADE_MODE_DEMO)
     {
      switch(accounttype)
        {
         case ACCOUNT_TRADE_MODE_DEMO:
            if( lotsize > ( lotstep * lotsizemax ) ) return;
            trademode="demo";
            break;
         case ACCOUNT_TRADE_MODE_CONTEST:
            trademode="contest";
            break;
         default:
            trademode="live";
            break;
        }
     }
   Print("Trade Mode: ",trademode);
  }
 

Для проверки того, демо-счет это или реальный счет, конкурс используется редко.

Максимальный лот может быть очень простым.

//---
// calculate lotsize here
//---

// check if lotsize is not too high

if(lotsize>lotsize_max)
{
  lotsize=losize_max;
}
Причина обращения: