Ответить
29.11.2014, 23:33
Аватар для Lender
Lender Lender вне форума Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
думаю тебе подойдет такой вариант:

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 мин придумал как можно сделать параметр, который нельзя изменять
PHP код:
enum lolParamD 
{
 
lolD // 5
};

input lolParamD D lolD
Программит, инфа в профиле

Последний раз редактировалось Lender; 29.11.2014 в 23:55.
30.11.2014, 07:28
Аватар для Andy200577
Andy200577 Andy200577 вне форума Новичок форума
Регистрация: 20.06.2012 / Сообщений: 57
Поблагодарили 8 раз(а) / Репутация: 9
думаю тебе подойдет такой вариант:

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 мин придумал как можно сделать параметр, который нельзя изменять
PHP код:
enum lolParamD 
{
 
lolD // 5
};

input lolParamD D lolD
Спасибо, но это не то. К тому же в последнем варианте нельзя вставить строку, а только числовое значение.
В общем, я надеюсь отыщу того советника и покажу тогда скрин, как это выглядит.
30.11.2014, 12:08
Аватар для Lender
Lender Lender вне форума Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
Спасибо, но это не то. К тому же в последнем варианте нельзя вставить строку, а только числовое значение.
вот пример с "обманкой", типа строка
PHP код:
enum lolParamD 
{
 
lolD_str// My str
};

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

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

как выглядит:
Программит, инфа в профиле

Последний раз редактировалось Lender; 30.11.2014 в 12:10.
01.12.2014, 14:35
Аватар для egorr007
egorr007 egorr007 вне форума Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Помогите пожалуйста,

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

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

что бы она, фиксировала бы, максимальное/минимальное значение, а с приходом 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=0i<ki++){
          if (
OrderSelect(iSELECT_BY_POSMODE_TRADES)) {
            if (
OrderSymbol()==sy || sy=="") {
             if (
OrderType()==OP_BUY || OrderType()==OP_SELL) {
              if (
op<|| OrderType()==op) {
               
Profit +=OrderProfit()+OrderCommission()+OrderSwap(); 
              }}}}}
              return(
Profit);} // Nast   
//+------------------------------------------------------------------+ 

Последний раз редактировалось egorr007; 01.12.2014 в 15:01.
02.12.2014, 06:50
Аватар для egorr007
egorr007 egorr007 вне форума Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Или счётчик для этой функции, который смог бы фиксировать максимальные значения,
а на начало дня, делать сброс.

Спасибо.
02.12.2014, 07:27
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Или счётчик для этой функции, который смог бы фиксировать максимальные значения,
а на начало дня, делать сброс.

Спасибо.
Направление мыслей у тебя правильное. Только вот не понимаю почему вместо проб и отсеивания ошибочных решений ты тратишь время на ожидание советов, и к сожалению не всегда адекватных.
02.12.2014, 07:30
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Или счётчик для этой функции, который смог бы фиксировать максимальные значения,
а на начало дня, делать сброс.

Спасибо.
Но чтобы макс просадку то в глобальных переменных
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);
02.12.2014, 19:49
Аватар для egorr007
egorr007 egorr007 вне форума Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Спасибо Большое!! Очень помогли!!!
02.12.2014, 20:44
Аватар для egorr007
egorr007 egorr007 вне форума Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Направление мыслей у тебя правильное. Только вот не понимаю почему вместо проб и отсеивания ошибочных решений ты тратишь время на ожидание советов, и к сожалению не всегда адекватных.
Простите?
03.12.2014, 07:54
Аватар для egorr007
egorr007 egorr007 вне форума Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Делаю так:
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=0i<ki++){
          if (
OrderSelect(iSELECT_BY_POSMODE_TRADES)) {
            if (
OrderSymbol()==sy || sy=="") {
             if (
OrderType()==OP_BUY || OrderType()==OP_SELL) {
              if (
op<|| OrderType()==op) {
               
Profit +=OrderProfit()+OrderCommission()+OrderSwap(); 
                if(
max_minus<ProfitProfit max_minus;
              }}}}}
              return(
Profit);} //  
//+------------------------------------------------------------------+ 
минусовое значение , не фиксирует. Посмотрите, пожалуйста.
Сейчас показывает всё что меньше нуля и ноль.

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

Спасибо.

Последний раз редактировалось egorr007; 03.12.2014 в 08:38.
03.12.2014, 08:04
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Делаю так:
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=0i<ki++){
          if (
OrderSelect(iSELECT_BY_POSMODE_TRADES)) {
            if (
OrderSymbol()==sy || sy=="") {
             if (
OrderType()==OP_BUY || OrderType()==OP_SELL) {
              if (
op<|| OrderType()==op) {
               
Profit +=OrderProfit()+OrderCommission()+OrderSwap(); 
                if(
max_minus<ProfitProfit max_minus;
              }}}}}
              return(
Profit);} //  
//+------------------------------------------------------------------+ 
минусовое значение , не фиксируется. Посмотрите плз.
PHP код:
Profit =OrderProfit()+OrderCommission()+OrderSwap(); 
if(
Profit<max_minusmax_minus Profit
03.12.2014, 10:03
Аватар для egorr007
egorr007 egorr007 вне форума Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
PHP код:
Profit =OrderProfit()+OrderCommission()+OrderSwap(); 
if(
Profit<max_minusmax_minus Profit
А так, всё подряд показывает, и минусовые и плюсовые значения.
03.12.2014, 11:23
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
А так, всё подряд показывает, и минусовые и плюсовые значения.
Не верю.
03.12.2014, 11:56
Аватар для egorr007
egorr007 egorr007 вне форума Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Не верю.
Комментарий в начале старта 67 строка.

Функция в самом низу 477 строка.
03.12.2014, 11:57
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Простите?
Теперь прощаю. Даже с правильным направлением мысли, из подсказки получить ничего не получилось.
Вот полный код в виде советника. Компилируй, проверяй и переделывай как тебе удобней.
Код:
/********************************************************************\
//|                                                       !!Test.mq4 |
//|                                         Copyright 2014, Viktorov |
//|                                                   v4forex@qip.ru |
\********************************************************************/
#property copyright "Copyright 2014, Viktorov"
#property link      "v4forex@yandex.ru"
#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
03.12.2014, 12:49
Аватар для egorr007
egorr007 egorr007 вне форума Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Теперь прощаю. Даже с правильным направлением мысли, из подсказки получить ничего не получилось.
Вот полный код в виде советника. Компилируй, проверяй и переделывай как тебе удобней.

Если при запуске профит по символу меньше нуля, то maxEquity будет показывать 0
Да! Супер, оно самое!!! всё отлично фиксируется. сброс сделал по началу торговой сессии, в тостере всё работает.

Ещё раз огромное Спасибо!! Браво!!!

Последний раз редактировалось egorr007; 03.12.2014 в 12:53.
03.12.2014, 15:36
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711

По умолчанию Вопрос - к профи, как написать кусок кода???

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

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

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

Просьба сильно не пинать, потому что многое что позабыл, что знал...
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 03.12.2014 в 15:39.
03.12.2014, 16:20
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
1) Принципиальной разницы нет. Все равно на следующем тике будет выполнен проход и сработает трал или бу, или что там еще...
2) В сети есть уйма примеров, но если Вы не программируете, то вопрос лишен смысла ))
3) Есть, смотря что за стратегия реализована в советнике.
03.12.2014, 16:21
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Например:
_http://forum.mql4.com/ru/38949/page8#434276
03.12.2014, 16:25
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
в процессе освоения языка, и просмотра чужих кодов, возникло 3 вопроса:
1) как же все таки работает команда Start() по тексту кода, сверху вниз или как то иначе, всегда думал что вначале кода нужно открывать ордера, а ниже уже их селектить и делать что угодно, в том числе тралить и прочие вещи, пока не увидел кусок кода советника, в котором все было сделано наоборот, после Start() сразу шел кусок где селектились ордера и трались, а ниже уже кусок кода где ордера открывались...
Код внутри функции выполняется сверху вниз. Ну кроме циклов, там по кругу пока не выйдет. Как раз многие пишут открытие ордеров именнов конце кода. То есть сначала работаем с уже открытыми ордерами и собирает инфу по их наличию и параметрам если нужно.
Потом уже открытие новых, если нужно.
2)как написать и подключить простой безубыток к готовому советнику,желательно в старом билде МТ4
Взять готовую функцию безубытка. Разместить её за пределами функции start, вызвать её внутри функции start, как раз можно в начале.
3)есть ли смысл иметь безубыток и трал в одном советнике, или достаточно иметь что то одно?
Это зависит от стратегии которая реализована в советнике.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Milord 
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 10:42. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO