Ваши вопросы по языку MQL4

Lender

Активный участник
думаю тебе подойдет такой вариант:

PHP:
#property strict

input string iStoshParam = "Нaстройки Стохастика";
input string lol_K; // K = 10
      int    K      = 10;
input string lol_D; // D = 5
      int    D      = 5;
input string lol_Slowing; // Slowing = 5
      int    Slowing = 10;

скомпиль, и посмотри как отображается


спустя 10 мин придумал как можно сделать параметр, который нельзя изменять:laugh:
PHP:
enum lolParamD 
{
 lolD = 5 // 5
};

input lolParamD D = lolD;
 
Последнее редактирование:

Andy200577

Новичок форума
думаю тебе подойдет такой вариант:

PHP:
#property strict

input string iStoshParam = "Нaстройки Стохастика";
input string lol_K; // K = 10
      int    K      = 10;
input string lol_D; // D = 5
      int    D      = 5;
input string lol_Slowing; // Slowing = 5
      int    Slowing = 10;

скомпиль, и посмотри как отображается


спустя 10 мин придумал как можно сделать параметр, который нельзя изменять:laugh:
PHP:
enum lolParamD 
{
 lolD = 5 // 5
};

input lolParamD D = lolD;

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

Lender

Активный участник
Спасибо, но это не то. К тому же в последнем варианте нельзя вставить строку, а только числовое значение.

вот пример с "обманкой", типа строка
PHP:
enum lolParamD 
{
 lolD_str// My str
};

// только для отображения в настройках сова
input lolParamD lolD = lolD_str; // readD
      // для использования в сове
      string    readD = "My str";


Только не понимаю зачем это нужно)

как выглядит:
 

Вложения

  • 1111.png
    1111.png
    33 КБ · Просмотры: 30
Последнее редактирование:

egorr007

Новичок форума
Помогите пожалуйста,

функция, показывает текущую просадку/профит по инструменту,

возможно ли сделать так,

что бы она, фиксировала бы, максимальное/минимальное значение, а с приходом D1 сбрасывала бы счётчик.

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

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

Спасибо.
///////////////////////////////////////////////////////////////////////
PHP:
//+------------------------------------------------------------------+
 double Profit_OLSS(string sy="", int op=-1) {
        int i;
        int k=OrdersTotal();
        double Profit=0.0;
        if (sy=="0") sy=Symbol();
        for (i=0; i<k; i++){
          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderSymbol()==sy || sy=="") {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
              if (op<0 || OrderType()==op) {
               Profit +=OrderProfit()+OrderCommission()+OrderSwap(); 
              }}}}}
              return(Profit);} // Nast   
//+------------------------------------------------------------------+
 
Последнее редактирование:

egorr007

Новичок форума
Или счётчик для этой функции, который смог бы фиксировать максимальные значения,
а на начало дня, делать сброс.

Спасибо.
 

AlexeyVik

Программист mql4 mql5
Или счётчик для этой функции, который смог бы фиксировать максимальные значения,
а на начало дня, делать сброс.

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

eevviill

Заблокирован
Или счётчик для этой функции, который смог бы фиксировать максимальные значения,
а на начало дня, делать сброс.

Спасибо.
Но чтобы макс просадку то в глобальных переменных
double max_pros;
После OnTick()
if(Profit_OLSS()<max_pros) max_pros=Profit_OLSS();


Чтобы скинуть счётчик
В глобальных
datetime prevtime_D;
После OnTick()
if (iTime(Symbol(),PERIOD_D1,0)!= prevtime) max_pros=0;
prevtime = iTime(Symbol(),PERIOD_D1,0);
 

egorr007

Новичок форума
Делаю так:
PHP:
//+------------------------------------------------------------------+
 double Profit_Minus(string sy="", int op=-1) {
        int i;
        double max_minus;
        int k=OrdersTotal();
        double Profit=0.0;
        if (sy=="0") sy=Symbol();
        for (i=0; i<k; i++){
          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderSymbol()==sy || sy=="") {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
              if (op<0 || OrderType()==op) {
               Profit +=OrderProfit()+OrderCommission()+OrderSwap(); 
                if(max_minus<Profit) Profit = max_minus;
              }}}}}
              return(Profit);} //  
//+------------------------------------------------------------------+
минусовое значение , не фиксирует. Посмотрите, пожалуйста.
Сейчас показывает всё что меньше нуля и ноль.

Можно ли как то, фиксировать минусовые значения, типо храповика.
Например было -1, -2, фиксировать -2, если появилось -4, фиксировать -4,
если появилось -5,-6,-7,- 9, фиксировать -9.

Спасибо.
 
Последнее редактирование:

eevviill

Заблокирован
Делаю так:
PHP:
//+------------------------------------------------------------------+
 double Profit_Minus(string sy="", int op=-1) {
        int i;
        double max_minus;
        int k=OrdersTotal();
        double Profit=0.0;
        if (sy=="0") sy=Symbol();
        for (i=0; i<k; i++){
          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderSymbol()==sy || sy=="") {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
              if (op<0 || OrderType()==op) {
               Profit +=OrderProfit()+OrderCommission()+OrderSwap(); 
                if(max_minus<Profit) Profit = max_minus;
              }}}}}
              return(Profit);} //  
//+------------------------------------------------------------------+
минусовое значение , не фиксируется. Посмотрите плз.
PHP:
Profit =OrderProfit()+OrderCommission()+OrderSwap(); 
if(Profit<max_minus) max_minus = Profit;
:D
 

AlexeyVik

Программист mql4 mql5
Теперь прощаю. Даже с правильным направлением мысли, из подсказки получить ничего не получилось.
Вот полный код в виде советника. Компилируй, проверяй и переделывай как тебе удобней.
Код:
/********************************************************************\
//|                                                       !!Test.mq4 |
//|                                         Copyright 2014, Viktorov |
//|                                                   [email protected] |
\********************************************************************/
#property copyright "Copyright 2014, Viktorov"
#property link      "[email protected]"
#property version   "1.00"
#property strict

double minEquity, maxEquity;
/*******************expert initialization function*******************/
int OnInit()
{
  minEquity = AccountEquity();
   return(INIT_SUCCEEDED);
}/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
{
   if(NewBar(PERIOD_D1)) minEquity = AccountEquity();
    SymbEquity(_Symbol);
   Comment("\n", "maxEquity = ", DoubleToString(maxEquity, 2)
         , "\n", "minEquity = ", DoubleToString(minEquity, 2)
         );
}/*******************************************************************/

void SymbEquity(string symbol)
{
 double Pros = 0;
  int i, total = OrdersTotal();
   for(i = 0; i < total; i++)
    {
     if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == _Symbol)
      {
       Pros += OrderProfit()+OrderSwap()+OrderCommission();
      }
    }
   minEquity = MathMin(Pros, minEquity);
   maxEquity = MathMax(Pros, maxEquity);
}/*******************************************************************/

bool NewBar(int tf)
{
  static datetime lastbar;
   datetime curbar = iTime(_Symbol, tf, 0);
   if(lastbar != curbar)
    {
     lastbar = curbar;
     return (true);
    }
   else return(false);
}//******************************************************************|

/******************expert deinitialization function******************/
void OnDeinit(const int reason)
{
   Comment("");
}/*******************************************************************/

Если при запуске профит по символу меньше нуля, то maxEquity будет показывать 0
 

egorr007

Новичок форума
Теперь прощаю. Даже с правильным направлением мысли, из подсказки получить ничего не получилось.
Вот полный код в виде советника. Компилируй, проверяй и переделывай как тебе удобней.

Если при запуске профит по символу меньше нуля, то maxEquity будет показывать 0

Да! Супер, оно самое!!! всё отлично фиксируется. сброс сделал по началу торговой сессии, в тостере всё работает.

Ещё раз огромное Спасибо!! :) :) :) Браво!!!
 
Последнее редактирование:

Milord

Местный знаток
Вопрос - к профи, как написать кусок кода???

в процессе освоения языка, и просмотра чужих кодов, возникло 3 вопроса:
1) как же все таки работает команда Start() по тексту кода, сверху вниз или как то иначе, всегда думал что вначале кода нужно открывать ордера, а ниже уже их селектить и делать что угодно, в том числе тралить и прочие вещи, пока не увидел кусок кода советника, в котором все было сделано наоборот, после Start() сразу шел кусок где селектились ордера и трались, а ниже уже кусок кода где ордера открывались...:facepalm:

2)как написать и подключить простой безубыток к готовому советнику,желательно в старом билде МТ4

3)есть ли смысл иметь безубыток и трал в одном советнике, или достаточно иметь что то одно?

Просьба сильно не пинать, потому что многое что позабыл, что знал...
 
Последнее редактирование:

matro3

Почетный гражданин
1) Принципиальной разницы нет. Все равно на следующем тике будет выполнен проход и сработает трал или бу, или что там еще...
2) В сети есть уйма примеров, но если Вы не программируете, то вопрос лишен смысла ))
3) Есть, смотря что за стратегия реализована в советнике.
 

Ugar

Гуру форума
в процессе освоения языка, и просмотра чужих кодов, возникло 3 вопроса:
1) как же все таки работает команда Start() по тексту кода, сверху вниз или как то иначе, всегда думал что вначале кода нужно открывать ордера, а ниже уже их селектить и делать что угодно, в том числе тралить и прочие вещи, пока не увидел кусок кода советника, в котором все было сделано наоборот, после Start() сразу шел кусок где селектились ордера и трались, а ниже уже кусок кода где ордера открывались...:facepalm:
Код внутри функции выполняется сверху вниз. Ну кроме циклов, там по кругу пока не выйдет. Как раз многие пишут открытие ордеров именнов конце кода. То есть сначала работаем с уже открытыми ордерами и собирает инфу по их наличию и параметрам если нужно.
Потом уже открытие новых, если нужно.
2)как написать и подключить простой безубыток к готовому советнику,желательно в старом билде МТ4
Взять готовую функцию безубытка. Разместить её за пределами функции start, вызвать её внутри функции start, как раз можно в начале.
3)есть ли смысл иметь безубыток и трал в одном советнике, или достаточно иметь что то одно?
Это зависит от стратегии которая реализована в советнике.
 
Верх