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

gzh

Интересующийся
Слушай, ты че постоянно меня критикуешь! это не так сделал, то не так сделал, тут не красиво написал. Если реально не хочешь помочь, проходи мимо. Какие у меня названия переменных, чем они тебе не нравятся ??? Нормальные названия! Просьба у меня была элементарная, помочь с простейшей функцией, тут делов на 5минут для опытного прогера, просто видать лень кому-то заниматься этим, в лом! Если реально есть че сказать по коду, ты говори, а если нет, то пропусти мое сообщение и все.
 

AlexeyVik

Программист mql4 mql5
Ты зря пылишь, замечание по поводу переменных правильное. Может только не в стиле хоза, вот и не очень ему понравилось или не правильно он выразил свою мысль. Так часто бывает.
Не смотря на твою вспыльчивость по поводу замечаний о переменных я тоже сделаю замечание. Не следует менять значения переменным extern. Лучше присвоить это значение другой переменной и с ней работать.
extern lot = 1;
А в функции lots = lot; и после этого условие if(...) lots = lots*2; Это просто пример
Что касается избавления от цикла:
На глобальном уровне объяви переменные
int TicketBuy, TicletSell;
Открывая ордер присваиваешь переменной тикет ордера.
TicketBuy = OrderSend(.............);
Потом проверку
if(OrderSelect(TicketBuy, SELECT_BY_TICKET) && OrderCloseTime() > 0 && OrderProfit() >= profit) lots = OrderLots() +...;

Это как увеличить лот после удачной сделки. А как его оставить без изменений вариантов несколько, свой навязывать не буду. И соответственно проверку ордера Sell отдельной строкой.
Ну и пока без обработки ошибок открытия ордера.
 

hoz

Активный участник
Слушай, ты че постоянно меня критикуешь! это не так сделал, то не так сделал, тут не красиво написал. Если реально не хочешь помочь, проходи мимо. Какие у меня названия переменных, чем они тебе не нравятся ??? Нормальные названия! Просьба у меня была элементарная, помочь с простейшей функцией, тут делов на 5минут для опытного прогера, просто видать лень кому-то заниматься этим, в лом! Если реально есть че сказать по коду, ты говори, а если нет, то пропусти мое сообщение и все.

То что ты злишся это понятно. У меня раньше была схожая ситуация. Я понимаю, что "очередной грааль" хочется написать быстрее, и желание бывает такое, что ждать ой как не хочется. Но я, в том момент, однажды, чутка приостановился и подумал,после того как написал уже не один эксперт.. вот тогда я понял, что не знал ничего по сути. И было очень грустно это осознавать:facepalm: Вот тогда я начал въезжать и вникать, чуть ли не с нуля, хотя за плечами уже были написаны эксперты.
Я хочу сказать, что не нужно кричать, что мол тебя тут так вот критикуют, а понять причину..
Кстати, я не в курсе, почему ты решил, что я на тебя гоню, т.к. мне это вообще не интересно.
Если есть эксперт, покажи принты..
Как сказал, Алексей, не нужно переменные extern менять. Так же советовать можно, зная логику. Что у тебя на уме я не в курсе. Нужно чтоб лот увеличивался при условии что профит ордера меньше переменной Profit. Нужно сверять последний ордер, или какой? Если да, то раздели задачу на 2 функции хотя бы.
1. Найди последний закрытый ордер.
2. Увеличивай лот при необходимости.
 

Milord

Местный знаток
Как сделать выключатель???

вопрос как написать код, чтобы работал выключатель части кода, например выключить условие с переменной В

PHP:
extern int n=0;// включение 1,выключение 0

.
.
int start()
{
  if(Bid>A)
   {
    if(Bid>B)
     {
      OrderSend(.....);
     }
   }

return(0);
}
то есть тут показано положение выключателя n=1;
а ниже логика кода при n=0;
PHP:
int start()
{
  if(Bid>A)
   {
    OrderSend(.....);
   }

return(0);
}
подскажите плиз, как сделать чтобы работал выключатель n???
 

hoz

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

PHP:
extern int n=0;// включение 1,выключение 0

.
.
int start()
{
  if(Bid>A)
   {
    if(Bid>B)
     {
      OrderSend(.....);
     }
   }

return(0);
}
то есть тут показано положение выключателя n=1;
а ниже логика кода при n=0;
PHP:
int start()
{
  if(Bid>A)
   {
    OrderSend(.....);
   }

return(0);
}
подскажите плиз, как сделать чтобы работал выключатель n???

Я не понял общей картины. Напиши лучше словами и по пунктам что требуется реализовать, а там и подумаем как...
 

ansol

Местный знаток
вопрос как написать код, чтобы работал выключатель части кода, например выключить условие с переменной В

PHP:
extern int n=0;// включение 1,выключение 0

.
.
int start()
{
  if(Bid>A)
   {
    if(Bid>B)
     {
      OrderSend(.....);
     }
   }

return(0);
}
то есть тут показано положение выключателя n=1;
а ниже логика кода при n=0;
PHP:
int start()
{
  if(Bid>A)
   {
    OrderSend(.....);
   }

return(0);
}
подскажите плиз, как сделать чтобы работал выключатель n???

PHP:
extern int n=0;// включение 1,выключение 0 

. 
. 
int start() 
{ 
  if(Bid>A) 
   { 
    if(Bid>B || !n) 
     { 
      OrderSend(.....); 
     } 
   } 

return(0); 
}
При n=0 условие Bid>B не играет роли, все равно 1 и ордерсенд сработает
При n=1 будет зависимость от "Bid>B"
Так надо или я че-то не понял?
Лучше бы n сделать тип bool со значениями TRUE (1) и FALSE (0), а то мало ли чего :)
 

qqmber

Почетный гражданин
вопрос как написать код, чтобы работал выключатель части кода, например выключить условие с переменной В
PHP:
extern int n=0;// включение 1,выключение 0

.
.
int start()
{
  if(Bid>A)
   {
    if(Bid>B)
     {
      OrderSend(.....);
     }
   }

return(0);
}
то есть тут показано положение выключателя n=1;
а ниже логика кода при n=0;
PHP:
int start()
{
  if(Bid>A)
   {
    OrderSend(.....);
   }

return(0);
}
подскажите плиз, как сделать чтобы работал выключатель n???

Ваше сиятельство, я не понял в чем трудность.
if(n==0 || Bid>B) {OrderSend();}
 

expforex

Программиров
Уважаемые программисты!
Объединил два советника (OM_2WAY_v3.6_INFO и MO 27,04,13_edu) в один (OM_2WAY_v3.6+Razrulivatel), скомпелировал, вроде все нормально без ошибок, но вот беда – полученный новый советник (OM_2WAY_v3.6+Razrulivatel) всегда открывает первый ордер размером 1 лот, независимо от того какое значение имеет StartLot или UseAutoLot (false или true), хотя (OM_2WAY_v3.6_INFO), без изменений работает нормально и ставит ордера в зависимости от переменных StartLot или UseAutoLot. Подскажите, в чем проблема?

код открытия лота 1 :
int init_Razrulivatel(){
if (Digits == 3 || Digits == 5) {
мин_шаг_усредняющих = 10 * мин_шаг_усредняющих;
мин_прибыль = 10 * мин_прибыль;
}
gd_148 = MarketInfo(Symbol(), MODE_MINLOT);
gd_140 = MarketInfo(Symbol(), MODE_MAXLOT);
gi_220 = MarketInfo(Symbol(), MODE_STOPLEVEL);
gs_212 = " " + AccountCurrency();
//gi_224 = AccountNumber();
if (IsTesting()) f0_2(OP_BUY, 1, NormalizeDouble(Ask, Digits));

убери
if (IsTesting()) f0_2(OP_BUY, 1, NormalizeDouble(Ask, Digits));
 

Leonup

Новичок форума
Помогите разобраться!

Здравствуйте!

Решил разобраться в следующей ситуации.
Допустим:
Hp – это высота свечи в пунктах, вычисленная как разница между High и Low: Hp = (High - Low)/Point;
Dist – это внешняя переменная, задаваемая в пунктах.
И решил найти разницу: Hp – Dist.
Все это сделал отдельным "советником", через Print.
Print("Hp - Dist= ", (Hp - Dist)/Point);
И в логах вижу, что Hp и Dist отображаются правильно, а вот разница Hp – Dist отображается неверно.
Hp = 741 пункт,
Dist =100 пунктов,
Hp – Dist = 64100000.
Как такое может быть?
Где у меня ошибка?

Хотел для наглядности загрузить файл log, но что-то не получается.
Файл, видно, что загружается, а где он - неизвестно.
 
Последнее редактирование:

eevviill

Заблокирован
Здравствуйте!

Решил разобраться в следующей ситуации.
Допустим:
Hp – это высота свечи в пунктах, вычисленная как разница между High и Low: Hp = (High - Low)/Point;
Dist – это внешняя переменная, задаваемая в пунктах.
И решил найти разницу: Hp – Dist.
Все это сделал отдельным "советником", через Print.
Print("Hp - Dist= ", (Hp - Dist)/Point);
И в логах вижу, что Hp и Dist отображаются правильно, а вот разница Hp – Dist отображается неверно.
Hp = 741 пункт,
Dist =100 пунктов,
Hp – Dist = 64100000.
Как такое может быть?
Где у меня ошибка?

Хотел для наглядности загрузить файл log, но что-то не получается.
Файл, видно, что загружается, а где он - неизвестно.
Ой, тьфу.
Просто отнимаешь Hp - Dist
 
Последнее редактирование:

Andy200577

Новичок форума
День добрый!
Хочу спросить у знающих людей такой момент.
Есть функции MQL4, использующие отдельные массивы данных, например, iMAOnArray или iBandsOnArray. Так вот, если я хочу предположим наложить МА на Стохастик (как пример), то для этого я перетаскиваю МА в окно Стохастика и выбираю в пункте "Применить к:" - First Indicator's Data в итоге МА рисуется прямо в окне на Стохастике. И я бы хотел получить данные этой МАшки в коде MQL4.
Насколько я понял, это делается как раз с помощью функции iMAOnArray , но вот непонятно - какой при этом массив использует МА, ведь у Стохастика как известно 2 буфера и соответственно 2 массива данных?? Не понял пока какой в данном случает массив нужно использовать для iMAOnArray, если подставлять один и другой массивы (MODE_MAIN или MODE_SIGNAL), то значения МА не совпадают с тем, что на рисунке в окне стохастика. Если один буфер вывода (как например у CCI), тогда всё понятно, но что делать, если буферов вывода 2 и более? Помогите пожалуйста разобраться.
 

qqmber

Почетный гражданин
День добрый!
Хочу спросить у знающих людей такой момент.
Есть функции MQL4, использующие отдельные массивы данных, например, iMAOnArray или iBandsOnArray. Так вот, если я хочу предположим наложить МА на Стохастик (как пример), то для этого я перетаскиваю МА в окно Стохастика и выбираю в пункте "Применить к:" - First Indicator's Data в итоге МА рисуется прямо в окне на Стохастике. И я бы хотел получить данные этой МАшки в коде MQL4.
Насколько я понял, это делается как раз с помощью функции iMAOnArray , но вот непонятно - какой при этом массив использует МА, ведь у Стохастика как известно 2 буфера и соответственно 2 массива данных?? Не понял пока какой в данном случает массив нужно использовать для iMAOnArray, если подставлять один и другой массивы (MODE_MAIN или MODE_SIGNAL), то значения МА не совпадают с тем, что на рисунке в окне стохастика. Если один буфер вывода (как например у CCI), тогда всё понятно, но что делать, если буферов вывода 2 и более? Помогите пожалуйста разобраться.

Встроенные индикаторы, позволяющие "Применить к:" применяются к нулевому буферу, независимо от сколько их там всего.
iMAOnArray использует ваш массив. Чем вы его заполните, то и будет сглажено. Судя по тому, что про заполнение этого массива нет ни слова, вероятно тут и проблема. Покажите, как у вас вызывается iMAOnArray() и как инициализируются ее параметры.
 

Andy200577

Новичок форума
Встроенные индикаторы, позволяющие "Применить к:" применяются к нулевому буферу, независимо от сколько их там всего.
iMAOnArray использует ваш массив. Чем вы его заполните, то и будет сглажено. Судя по тому, что про заполнение этого массива нет ни слова, вероятно тут и проблема. Покажите, как у вас вызывается iMAOnArray() и как инициализируются ее параметры.

Заполняю массив предположим вот такой строчкой:
for(int bar=0; bar<1000; bar++) Stoh[bar] = iStochastic(Symbol(),0,Kfast,Dfast,Zfast,MODE_SMA,0,MODE_MAIN,bar);

где, Kfast,Dfast,Zfast - переменные стохастика. Ну и соответственно массив Stoh[1000] должен быть входным массивом для iMAOnArray.
Я так это понимаю.
 

qqmber

Почетный гражданин
Заполняю массив предположим вот такой строчкой:
for(int bar=0; bar<1000; bar++) Stoh[bar] = iStochastic(Symbol(),0,Kfast,Dfast,Zfast,MODE_SMA,0,MODE_MAIN,bar);

где, Kfast,Dfast,Zfast - переменные стохастика. Ну и соответственно массив Stoh[1000] должен быть входным массивом для iMAOnArray.
Я так это понимаю.
Заинтриговался, но воспроизвести не смог. Код ниже отрабатывает все как положено. Может вас смущает, что у машки и у стохастика разные шкалы? В Data Window расхождение есть?
Код:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Aqua

extern int K=5,D=3,Z=3,M=0;
extern int P=3;

double ma[],st[] ;

int init() {
   IndicatorBuffers(2);
   SetIndexBuffer(0,ma);
   SetIndexBuffer(1,st);
}
int start() {
int i;
int limit=Bars-IndicatorCounted();
   for(i=0; i<limit; i++) st[i]=iStochastic(NULL,0,K,D,Z,0,0,M,i);
   for(i=0; i<limit; i++) ma[i]=iMAOnArray(st,0,P,0,0,i);
}
 

Andy200577

Новичок форума
Заинтриговался, но воспроизвести не смог. Код ниже отрабатывает все как положено. Может вас смущает, что у машки и у стохастика разные шкалы? В Data Window расхождение есть?
Код:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Aqua

extern int K=5,D=3,Z=3,M=0;
extern int P=3;

double ma[],st[] ;

int init() {
   IndicatorBuffers(2);
   SetIndexBuffer(0,ma);
   SetIndexBuffer(1,st);
}
int start() {
int i;
int limit=Bars-IndicatorCounted();
   for(i=0; i<limit; i++) st[i]=iStochastic(NULL,0,K,D,Z,0,0,M,i);
   for(i=0; i<limit; i++) ma[i]=iMAOnArray(st,0,P,0,0,i);
}

Так в том и дело, что в связи с расхождением с Data Windows у меня и возник этот вопрос. Считать то он считает, но не сходится с показаниями МА в окне Data Windows. Вот мне и непонятно какой именно массив нужно использовать, чтобы добиться полного совпадения.
 

qqmber

Почетный гражданин
Так в том и дело, что в связи с расхождением с Data Windows у меня и возник этот вопрос. Считать то он считает, но не сходится с показаниями МА в окне Data Windows. Вот мне и непонятно какой именно массив нужно использовать, чтобы добиться полного совпадения.
Я не совсем понял, мой код на вопрос ваш про массив ответил? В нем все сходится, и цифры в Data Window, и графики друг на друга точно ложатся, если сделать им одинаковую шкалу.
 

Andy200577

Новичок форума
Вот элементарный тестовый советник и картинка с его работой - _http://yadi.sk/d/cbMVHSmlBBV9f
он просто выводит на Print значение MA на каком-то баре, а данном случае [1]. Почему значения не совпадают, где ошибка?
 
Последнее редактирование модератором:

Ugar

Гуру форума
Вот элементарный тестовый советник и картинка с его работой - _http://yadi.sk/d/cbMVHSmlBBV9f
, он просто выводит на Print значение MA на каком-то баре, а данном случае [1]. Почему значения не совпадают, где ошибка?
Про направление индексации массива забыл?
bool ArraySetAsSeries( double&array[], bool set)В справочнике даже пример есть.
 
Последнее редактирование модератором:
Верх