Ответить
22.11.2014, 18:33
Аватар для Yurkov
Yurkov Yurkov вне форума Почётный гражданин
Регистрация: 19.01.2011 / Сообщений: 659
Поблагодарили 366 раз(а) / Репутация: 369
Сделал так:
void OnTick(){
Lots= AccountBalance() / 1000*LotsFor1000;
...
Лот начал пересчитываться, НО! Необходимо, чтоб советник добавлял лот на каждую 1000 единиц депозита, т.е. оставался 0.1, пока депозит не дойдет до 2000 и не реагировал на промежуточное значение ($1100,1200 и тд.)
22.11.2014, 18:42
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
Сделал так:
void OnTick(){
Lots= AccountBalance() / 1000*LotsFor1000;
...
Лот начал пересчитываться, НО! Необходимо, чтоб советник добавлял лот на каждую 1000 единиц депозита, т.е. оставался 0.1, пока депозит не дойдет до 2000 и не реагировал на промежуточное значение ($1100,1200 и тд.)
Можно так:
PHP код:
Lotsfmax(LotsFor1000LotsFor1000*int(AccountBalance()/1000)); 
Yurkov 
22.11.2014, 19:16
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711

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

Всем привет!
у меня вопрос такой, как написать в коде переключение на 3 режима, то есть например есть в коде 3 блока вычислений, мне нужно управлять их включением переключателем в настройках, переключатель например, при К=1, работает 1 блок,но не работают 2 и 3, при К=2, работает 2 блок, но не работает 1 и 3, при К=3, работает 3 блок, а 1 и 2 не работают , подскажите понятным языком как проще такой код сделать, а то был перерыв с написанием, даж стал забывать свои коды))
просьба написать в языке старого МЕ 229 билда, а то новый еще не освоил...или хотяб билд 509)
ЗАРАНЕЕ СПАСИБО!

PHP код:
extern int K=1//принимает значения 1 или 2 или 3

int start()
  {

//----------1 блок-------------
   
if(...)
    if(...)
//----------2 блок--------------
   
if(...)
    if(...)
//----------3 блок--------------
    
if(...)
    if(...) 
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
22.11.2014, 19:22
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
Milord
Полезно в хелпе поизучать оператор switch
Вроде как раз то, что нужно по вашей проблеме.

P.S. В старом билде он также работает
23.11.2014, 03:18
Аватар для egorr007
egorr007 egorr007 вне форума Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
Всем привет!

PHP код:
extern int K=1//принимает значения 1 или 2 или 3

int start()
  {

//----------1 блок-------------
   
if(...)
    if(...)
//----------2 блок--------------
   
if(...)
    if(...)
//----------3 блок--------------
    
if(...)
    if(...) 
PHP код:
extern int K=1//принимает значения 1 или 2 или 3

int start()
  {

//----------0 блок-------------
   
if(K==0){
   
//тут, то что должно происходить, или ничего
          
}
//----------1 блок-------------
   
if(K==1){
           
// то что должно происходить если  extern int K=1; 
          
}
//----------2 блок--------------
   
if(K==2){
    
// то что должно происходить если  extern int K=2; 
     
}
//----------3 блок--------------
    
if(K==3){// и т.д.
    

23.11.2014, 03:23
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
И все-таки, так лучше:
PHP код:
   string res="";
   
int i=0;
   switch(
i)
     {
      case 
1:
         
res=i;break;
      default:
         
res="default";break;
      case 
2:
         
res=i;break;
      case 
3:
         
res=i;break;
     }
   Print(
res);
/*
   Результат
   default
*/ 
24.11.2014, 14:26
Аватар для egorr007
egorr007 egorr007 вне форума Новичок форума
Регистрация: 31.08.2012 / Сообщений: 45
Поблагодарили 14 раз(а) / Репутация: 15
И все-таки, так лучше:

Да. Здорово!

А заставить индикатор по сигналу алерта, переключить таймфрейм, на другой и обратно, До следующего алерта.

О таком, возможно вас попросить?
24.11.2014, 16:37
Аватар для Lender
Lender Lender вне форума Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
код простого индюка: при алерте текущий ТФ меняется на tf1 или tf2, в зависимости от текущего ТФ, алерт дается если на графике есть любой обект с именем "1", после чего удаляется

PHP код:
enum ENUM_TIMEFRAMES2Period_M1 PERIOD_M1Period_M5 PERIOD_M5Period_M15 PERIOD_M15Period_M30 PERIOD_M30Period_H1 PERIOD_H1Period_H4 PERIOD_H4Period_D1 PERIOD_D1Period_W1 PERIOD_W1Period_MN PERIOD_MN1 };
extern ENUM_TIMEFRAMES2  tf1  Period_M15;
extern ENUM_TIMEFRAMES2  tf2  Period_M30;


//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
{
  
   if( 
ObjectFind("1") != EMPTY )
   {
      
DoAlert("my alert text");
      
ObjectDelete("1");
   }

   
 return(
0);
}

void DoAlertstring msg )
{
   if( 
ChartPeriod(0) == (ENUM_TIMEFRAMES)tf1 )
      
ChartSetSymbolPeriod(0Symbol(), (ENUM_TIMEFRAMES)tf2);
   else
      
ChartSetSymbolPeriod(0Symbol(), (ENUM_TIMEFRAMES)tf1);
     
  
Alert(msg);

Программит, инфа в профиле
egorr007 , Ugar 
24.11.2014, 17:14
Аватар для dvx
dvx dvx вне форума Местный житель
Регистрация: 02.11.2008 / Сообщений: 188
Поблагодарили 115 раз(а) / Репутация: 115
  • Отправить сообщение для dvx с помощью ICQ Отправить сообщение для dvx с помощью Skype™
PHP код:
for (int f=OrdersTotal()-1f>=0f--)
    {                                                                    
   
OrderSelect(fSELECT_BY_POS );       //выбираем ордер
   
{
      if(
OrderType() == OP_BUY && Magic==OrderMagicNumber() && OrderSymbol()==Symbol() )                        
{         
profit OrderProfit()+OrderSwap()+profit
           
profit_orderov=MathMax(profitprofit2);} 

Народ, помогите с кодом, нужно чтобы profit2 имел данные с предыдущего тика, то есть брался бы максимальный профит за два тика. Может через static как то сделать, сам не программист ...
На малых таймах, настроив индикаторы под старшие вы возьмете гораздо больше, потому что войдете в рынок раньше.
"fvaiu"
24.11.2014, 17:37
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,034 раз(а) / Репутация: 9034
  • Отправить сообщение для eevviill с помощью Skype™
PHP код:
for (int f=OrdersTotal()-1f>=0f--)
    {                                                                    
   
OrderSelect(fSELECT_BY_POS );       //выбираем ордер
   
{
      if(
OrderType() == OP_BUY && Magic==OrderMagicNumber() && OrderSymbol()==Symbol() )                        
{         
profit OrderProfit()+OrderSwap()+profit
           
profit_orderov=MathMax(profitprofit2);} 

Народ, помогите с кодом, нужно чтобы profit2 имел данные с предыдущего тика, то есть брался бы максимальный профит за два тика. Может через static как то сделать, сам не программист ...
Объяви глобальнкю переменную профит2.
А профит ей присваивай после твоего цыкла.
dvx 
25.11.2014, 15:41
Аватар для old6107
old6107 old6107 вне форума Местный житель
Регистрация: 11.03.2009 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 0

Вопрос помогите с кодом!

int i = 3;
while((UpFractal == 0 || DownFractal == 0) && i<Bars)
{
if(iFractals(Symbol(), 0, MODE_UPPER, i) != 0)
if(UpFractal == 0)
UpFractal = iFractals(Symbol(), 0, MODE_UPPER, i);
if(iFractals(Symbol(), 0, MODE_LOWER, i) != 0)
if(DownFractal == 0)
DownFractal = iFractals(Symbol(), 0, MODE_LOWER, i);
i++;
}
if(UpFractal == 0 || DownFractal == 0)
{
Print("Ошибка в истории. Не найден один из фракталов!");
return(0);
}

как найти еще и предыдущие UpFractal_1 и DownFractal_1 ????
25.11.2014, 16:05
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,034 раз(а) / Репутация: 9034
  • Отправить сообщение для eevviill с помощью Skype™
int i = 3;
while((UpFractal == 0 || DownFractal == 0) && i<Bars)
{
if(iFractals(Symbol(), 0, MODE_UPPER, i) != 0)
if(UpFractal == 0)
UpFractal = iFractals(Symbol(), 0, MODE_UPPER, i);
if(iFractals(Symbol(), 0, MODE_LOWER, i) != 0)
if(DownFractal == 0)
DownFractal = iFractals(Symbol(), 0, MODE_LOWER, i);
i++;
}
if(UpFractal == 0 || DownFractal == 0)
{
Print("Ошибка в истории. Не найден один из фракталов!");
return(0);
}

как найти еще и предыдущие UpFractal_1 и DownFractal_1 ????
PHP код:
double buf_frac_pricses_up[200];
uint frac_up_buf_changer=0;

for(
int i=0;i<Bars-1;i++)
{
if(
iFractals(Symbol(), 0MODE_UPPERi) != 0
{
buf_frac_pricses_up[frac_up_buf_changer]=iFractals(Symbol(), 0MODE_UPPERi);
frac_up_buf_changer++;
}

25.11.2014, 16:51
Аватар для old6107
old6107 old6107 вне форума Местный житель
Регистрация: 11.03.2009 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 0
спасибо. но что- то сложно для меня.почему цикл с i=0 и как из буфера использовать в такой конструкции if((UpFractal_0-UpFractal_1)/Point>=L))...
(я чайник!)
25.11.2014, 21:57
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,034 раз(а) / Репутация: 9034
  • Отправить сообщение для eevviill с помощью Skype™
спасибо. но что- то сложно для меня.почему цикл с i=0 и как из буфера использовать в такой конструкции if((UpFractal_0-UpFractal_1)/Point>=L))...
(я чайник!)
Ну 0 потому что текущий бар проверяем.
Буфер это как бы коробка куда что то сладываешь.
buf_frac_pricses_up[0] будет первый верхний фрактал
buf_frac_pricses_up[1] второй...
Vik940 
26.11.2014, 17:33
Аватар для old6107
old6107 old6107 вне форума Местный житель
Регистрация: 11.03.2009 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 0
int start()
{


double buf_frac_pricses_up[200];
uint frac_up_buf_changer=0;

for(int i=0;i<Bars-1;i++)
{
if(iFractals(Symbol(), 0, MODE_UPPER, i) != 0)
{
buf_frac_pricses_up[frac_up_buf_changer]=iFractals(Symbol(), 0, MODE_UPPER, i);
frac_up_buf_changer++;
}
}

double buf_frac_pricses_down[200];
uint frac_down_buf_changer=0;

for(int k=0;k<Bars-1;k++)
{
if(iFractals(Symbol(), 0,MODE_LOWER , k) != 0)
{
buf_frac_pricses_down[frac_down_buf_changer]=iFractals(Symbol(), 0,MODE_LOWER , k);
frac_down_buf_changer++;
}
}

if((buf_frac_pricses_up[1]-buf_frac_pricses_up[0])/Point>=L))...
.................
else

if((buf_frac_pricses_down[1]-buf_frac_pricses_down[0])/Point>=L))...
................

return(0);
}

Я правильно понял? или можно как то в один цикл объединить...
И ведь на текущем баре не может быть фрактала ( 4,3,фрак,1,0 )
только начиная с третьего.... может i=3... ???

Огромное спасибо за помощь.

Последний раз редактировалось old6107; 26.11.2014 в 17:49.
27.11.2014, 16:10
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711

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

нужно чтобы часть кода - "блок вычислений" работала не на каждом тике, а только один раз на открытии нулевой свечи, как это сделать подскажите плиз?
ЗАРАНЕЕ СПАСИБО!

PHP код:
int start()
{

//---блок вычислений---
{......}


тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
27.11.2014, 16:50
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,626
Поблагодарили 3,760 раз(а) / Репутация: 3752
нужно чтобы часть кода - "блок вычислений" работала не на каждом тике, а только один раз на открытии нулевой свечи, как это сделать подскажите плиз?
ЗАРАНЕЕ СПАСИБО!

PHP код:
int start()
{

//---блок вычислений---
{......}


Если на каждом баре то можешь воспользоваться вот этим
Код:
void OnTick()
 {
    if(NewBar())
     {
      // здесь выполняются действия на новом баре
     }
 }/*******************************************************************/ 

 bool NewBar()
 {
    static datetime lastbar = 0;
    datetime curbar = Time[0];
    if(lastbar != curbar)
     {
      lastbar = curbar;
      return (true);
     }
    else return(false);
 }/*******************************************************************/
Такой вариант работает только на текущем ТФ. Чтобы на любом ТФ можно было отследить новый бар нужного ТФ надо Time[0] заменить на iTime() с указанием периода.
А если всего один раз, то засунь в OnInit()
Milord 
27.11.2014, 17:53
Аватар для Alexz2107
Alexz2107 Alexz2107 вне форума Интересующийся
Регистрация: 05.05.2011 / Сообщений: 16
Поблагодарили 1 раз в 1 сообщении / Репутация: 2

Вопрос Закрытие самого убыточного ордера

Здравствуйте, помогите, пожалуйста, с кодом. Нужно закрывать САМЫЙ УБЫТОЧНЫЙ ордер из открытых, при этом если этот убыток не превышает значения глобальной переменной.
Что-то типа этого скрипта:
double LishBalans=XXXXXX
void CloseBiggestLoss(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal();

if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderProfit()+OrderSwap()<-LishBalans) ClosePosBySelect();
}
}
}
}
}
}
Но тут нет перебора именно наибольшего убытка из всех. А я всегда больше всего парюсь именно с переборами ордеров...
27.11.2014, 18:50
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Здравствуйте, помогите, пожалуйста, с кодом. Нужно закрывать САМЫЙ УБЫТОЧНЫЙ ордер из открытых, при этом если этот убыток не превышает значения глобальной переменной.
Что-то типа этого скрипта:
double LishBalans=XXXXXX
void CloseBiggestLoss(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal();

if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderProfit()+OrderSwap()<-LishBalans) ClosePosBySelect();
}
}
}
}
}
}
Но тут нет перебора именно наибольшего убытка из всех. А я всегда больше всего парюсь именно с переборами ордеров...
Сначала надо перебрать ордера сравнивая их прибыль с предыдущим, для поиска самого убыточного и запоминая его тикет и прибыль.
Потом, уже выйдя из цикла, сравнить прибыль с глобальной переменной и закрыть используя запомненный тикет.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
28.11.2014, 19:04
Аватар для Andy200577
Andy200577 Andy200577 вне форума Новичок форума
Регистрация: 20.06.2012 / Сообщений: 57
Поблагодарили 8 раз(а) / Репутация: 9
Уважаемые знатоки MQL.
Хотел бы задать вопрос по поводу внешних переменных советника, индикатора не важно.
Есть ли в MQL возможность сделать переменные неактивными для выбора (серым цветом обычно)? А именно например, есть булевый параметр, который включает и выключает использование, например, стохастика. При выборе true стохастик применяется и все его переменные можно изменить, а при выборе false стохастик не используется в торговле и по идее нужно сделать, чтобы переменные были неактивными и их нельзя было менять. Возможно ли сделать такое средствами MQL ?
Спасибо.
Ответить

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


Опции темы

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

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



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


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