Ответ
 
Опции темы
29.11.2014, 23:33
Аватар для 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.
Lender вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (30.11.2014)
30.11.2014, 07:28
Аватар для Andy200577
Andy200577 Новичок форума
Регистрация: 20.06.2012 / Сообщений: 57
Поблагодарили 8 раз(а) / Репутация: 9
Сообщение от 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 мин придумал как можно сделать параметр, который нельзя изменять
PHP код:
enum lolParamD 
{
 
lolD // 5
};

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

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

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

как выглядит:
Миниатюры:
Нажмите на изображение для увеличения
Название: 1111.png
Просмотров: 15
Размер:	33.0 Кб
ID:	186580  

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Программит, инфа в профиле

Последний раз редактировалось Lender; 30.11.2014 в 12:10.
Lender вне форума Ответить с цитированиемОтветить с цитированием  
01.12.2014, 14:35
Аватар для 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.
egorr007 на форуме Ответить с цитированиемОтветить с цитированием  
02.12.2014, 06:50
Аватар для egorr007
egorr007 Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Или счётчик для этой функции, который смог бы фиксировать максимальные значения,
а на начало дня, делать сброс.

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

Спасибо.
Направление мыслей у тебя правильное. Только вот не понимаю почему вместо проб и отсеивания ошибочных решений ты тратишь время на ожидание советов, и к сожалению не всегда адекватных.
AlexeyVik на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
egorr007 (03.12.2014)
02.12.2014, 07:30
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

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

Спасибо.
Но чтобы макс просадку то в глобальных переменных
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);
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
egorr007 (02.12.2014), Milord (03.12.2014)
02.12.2014, 19:49
Аватар для egorr007
egorr007 Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Спасибо Большое!! Очень помогли!!!
egorr007 на форуме Ответить с цитированиемОтветить с цитированием  
02.12.2014, 20:44
Аватар для egorr007
egorr007 Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Сообщение от AlexeyVik Посмотреть сообщение
Направление мыслей у тебя правильное. Только вот не понимаю почему вместо проб и отсеивания ошибочных решений ты тратишь время на ожидание советов, и к сожалению не всегда адекватных.
Простите?
egorr007 на форуме Ответить с цитированиемОтветить с цитированием  
03.12.2014, 07:54
Аватар для 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.
egorr007 на форуме Ответить с цитированиемОтветить с цитированием  
03.12.2014, 08:04
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,027 раз(а) / Репутация: 9027
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от 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=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
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
03.12.2014, 10:03
Аватар для egorr007
egorr007 Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Сообщение от eevviill Посмотреть сообщение
PHP код:
Profit =OrderProfit()+OrderCommission()+OrderSwap(); 
if(
Profit<max_minusmax_minus Profit
А так, всё подряд показывает, и минусовые и плюсовые значения.
egorr007 на форуме Ответить с цитированиемОтветить с цитированием  
03.12.2014, 11:23
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

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

Функция в самом низу 477 строка.
Вложения:
Тип файла: rar Auto-prof.rar (4.1 Кб, 2 просмотров)
egorr007 на форуме Ответить с цитированиемОтветить с цитированием  
03.12.2014, 11:57
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,710 раз(а) / Репутация: 3706
Сообщение от egorr007 Посмотреть сообщение
Простите?
Теперь прощаю. Даже с правильным направлением мысли, из подсказки получить ничего не получилось.
Вот полный код в виде советника. Компилируй, проверяй и переделывай как тебе удобней.
Код:
/********************************************************************\
//|                                                       !!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
AlexeyVik на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
egorr007 (03.12.2014)
03.12.2014, 12:49
Аватар для egorr007
egorr007 Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Сообщение от AlexeyVik Посмотреть сообщение
Теперь прощаю. Даже с правильным направлением мысли, из подсказки получить ничего не получилось.
Вот полный код в виде советника. Компилируй, проверяй и переделывай как тебе удобней.

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

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

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

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


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

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

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

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

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

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

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Milord (03.12.2014)
Ответ

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


Опции темы

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

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



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


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