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

 
Marco vd Heijden:

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

Спасибо за быстрый ответ.

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

Могу ли я использовать switch operator?

Спасибо большое.
(Я попробую позже.)

 
Да, вы можете использовать оператор переключения.
 
Marco vd Heijden:
//---
// calculate lotsize here
//---

// check if lotsize is not too high

if(lotsize>lotsize_max)
{
  lotsize=losize_max;
}

Я хочу спросить - вы хотите сказать - если "lotize > lotize_max", то размер лота должен быть "lotize = lotize_max" для демо счета? Я правильно вас понял, пожалуйста?

Спасибо большое.
(Я работаю над этим)

 
Max Enrik:

Я хочу спросить - вы хотите сказать - если "lotize > lotize_max", то размер лота должен быть "lotize = lotize_max" для демо счета? Я правильно вас понял, пожалуйста?

Спасибо большое.
( Я работаю над этим )

Попробуйте
if(IsDemo() && lotize>lotsize_max) lotize=lotsize_max;
 
honest_knave:
Попробуйте
if(IsDemo() && lotize>lotsize_max) lotize=lotsize_max;

О! Отлично! Большое спасибо.

----
функция должна спросить меня - Да или Нет- я думаю, что это может быть лучше на данный момент. (Мне просто нужен опыт для этой функции, как она работает для меня на демо (конечно, реальном) счете - я буду тестировать эту функцию в понедельник - если я смогу закончить эту часть кода).
( сейчас я не знаю достаточно об этой функции - надеюсь, я смогу сделать это до завтра )

Любой хороший комментарий будет лучшей помощью для меня.
Заранее спасибо.

 

Да, конечно, конечно, всеми средствами идите с ним без lotsmax и если вы потом захотите более тонко настроить свою стратегию или ограничить риск, вы можете использовать его, так что это не является необходимостью как таковой в настоящее время.

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


Если вам нужно подтверждение, вы можете использовать

MessageBox()

https://docs.mql4.com/common/messagebox


int result=MessageBox(" This is a Messagbox, Do you want to proceed?","Warning",MB_YESNO);

if(result==IDYES)
{
  // Yes Pressed
   Print("OK");
}

if(result==IDNO)
{
  // No Pressed
}

Вот основные флаги, которые вы устанавливаете в функции messagebox после сообщения:

Константа

Значение

Описание

MB_OK

0x00000000

Окно сообщения содержит только одну кнопку: OK. По умолчанию

MB_OKCANCEL

0x00000001

Окно сообщения содержит две кнопки: OK и Cancel

MB_ABORTRETRYIGNORE

0x00000002

Окно сообщения содержит три кнопки: Прервать, Повторить и Игнорировать

MB_YESNOCANCEL

0x00000003

Окно сообщения содержит три кнопки: Да, Нет и Отмена

MB_YESNO

0x00000004

Окно сообщения содержит две кнопки: Да и Нет

MB_RETRYCANCEL

0x00000005

Окно сообщения содержит две кнопки: Повторить и Отменить

MB_CANCELTRYCONTINUE

0x00000006

Окно сообщения содержит три кнопки: Отменить, Повторить попытку, Продолжить


А вот возвращаемые значения:

Константа

Значение

Описание

IDOK

1

Была нажата кнопка "ОК"

IDCANCEL

2

Была нажата кнопка "Отмена"

ИДАБОРТ

3

Нажата кнопка "Отмена"

IDRETRY

4

Нажата кнопка "Повторная попытка"

ИДИГНОР

5

Нажата кнопка "Игнорировать"

IDYES

6

Нажата кнопка "Да"

ИДНО

7

Нажата кнопка "Нет"

IDTRYAGAIN

10

Нажата кнопка "Повторите попытку"

IDCONTINUE

11

Была нажата кнопка "Продолжить".


Messagebox() не работает в тестере.

MessageBox - Common Functions - MQL4 Reference
MessageBox - Common Functions - MQL4 Reference
  • docs.mql4.com
MessageBox - Common Functions - MQL4 Reference
 
Marco vd Heijden:

Да, конечно, конечно, конечно, идите с ним без lotsmax и если вы потом захотите более тонко настроить свою стратегию или ограничить риск, вы можете использовать его, так что это не необходимость как таковая в настоящее время.
Вы можете просто исключить его. Я просто хотел показать вам несколько линий моего механизма безопасности.

Большое спасибо за вашу помощь.

Итак, я только что попробовал нижеприведенный метод, правильно ли я делаю, пожалуйста?
(Мне нужно было спросить, прежде чем я перенесу их в мой основной файл .mq4 - я работаю над ним)

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

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }

  if(result_message==IDNO)
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}
 

Просто совет по стилю, который сделает ваш код более эффективным (очень, очень незначительно)... но это все сходится!

У вас есть окно сообщения с 2 кнопками. Если это не IDYES, то это должно быть IDNO (или функция не была завершена успешно).

Поэтому нет необходимости проверять result_message дважды.

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }
   else
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}

Если вы предпочитаете видеть это в письменном виде, используйте оператор 'else if':

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }

  else if(result_message==IDNO)
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}
 
honest_knave:

Просто совет по стилю, который сделает ваш код более эффективным (очень, очень незначительно)... но это все сходится!
У вас есть окно сообщения с 2 кнопками. Если это не IDYES, то это должно быть IDNO (или функция не была завершена успешно).
Поэтому нет необходимости проверять result_message дважды.

Большое спасибо за все.
Теперь я могу вставить их в основной советник.
( также мне нужен опыт для MessageBox() )

 
Max Enrik:

Огромное спасибо за все.
Теперь я могу вставить их в основной советник.
( также мне нужен опыт для MessageBox() )

Нет ничего плохого в том, что он был написан по-другому, это просто личные предпочтения. Рад, что вы разобрались с этим.
Причина обращения: