tchumachenkovlad Опубликовано 27 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 марта, 2016 анкт' - необъявленный идентификатор test3.mq4 и 84 13ST=NormalizeDouble(Ask-StopLoss*Point,Digits); и на той же строкевозможная потеря данных из-за преобразования типов test3.mq4подскажите как исправитьextern string TMA="Параметры";extern int TakeProfit =100;extern int StopLoss =50;extern int Megic = 123;extern double Lots = 0.01;extern int Slippage =5;extern string TimeFrame = "current time frame";extern int HalfLength = 56;extern int Price = PRICE_CLOSE;extern double ATRMultiplier = 2.0;extern int ATRPeriod = 100;extern bool Interpolate = true;double PriceHigh,PriceLow,SL,TP;int ticket;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit(){if(Digits==3 || Digits==5){TakeProfit*=10;StopLoss*=10;Slippage*=10;}return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+//---//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){PriceHigh=iCustom(NULL,0,"TMA_Fair",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,1,0);PriceLow=iCustom(NULL,0,"TMA_Fair",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,2,0);if(CountBuy()==0 && Ask{ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"tma",Megic,0,Blue);if(ticket>0){TP=NormalizeDouble(Ask+TakeProfit*Point,Digits);ST=NormalizeDouble(Ask-StopLoss*Point,Digits);if(OrderSelect(ticket,SELECT_BY_TICKET))if( OrderModify(ticket,OrderOpenPrice(),ST,TP,0))Print("Ошибка");}}if(CountSell()==0 && Bid>=PriceHigh){ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"tma",Megic,0,Red);if(ticket>0){ST=NormalizeDouble(Bid+StopLoss*Point,Digits);TP=NormalizeDouble(Bid-TakeProfit*Point,Digits);if(OrderSelect(ticket,SELECT_BY_TICKET))if( OrderModify(ticket,OrderOpenPrice(),ST,TP,0))Print("Ошибка");}}}//+------------------------------------------------------------------+int CountSell(){int count=0;for(int trede=OrdersTotal()-1;trede>=0;trede--){if(OrderSelect(trede,SELECT_BY_POS,MODE_TRADES)){if(OrderSymbol()==Symbol() && OrderMagicNumber()==Megic && OrderType()==OP_SELL)count++;}}return(count);}int CountBuy(){int count=0;for(int trede=OrdersTotal()-1;trede>=0;trede--){if(OrderSelect(trede,SELECT_BY_POS,MODE_TRADES)){if(OrderSymbol()==Symbol() && OrderMagicNumber()==Megic && OrderType()==OP_BUY)count++;}}return(count);}//+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
deathmurder Опубликовано 27 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 марта, 2016 Уважаемы Сергей aka XBMS!Появилась идея для одного из уроков.Иногда сталкиваешься с задачей построения индикатора данные для которого хранятся в файле CSV (либо любом другом табличном документе). Формат данных в файле два одномерных массива один из которых дата, другой - значение индикатора.Могли бы Вы, опираясь на Ваш опыт программирования, помочь нам - рядовым трейдерам разобраться в этой теме. Расскажите нам как выгружать автоматом файлы с сайтов (знаю это делается на VBA, в MQL функций не нашел), извлекать данные, и строить непосредственно сам индикатор, т.к. уроков на которых рассматривалось бы построение индикатора от Вас нет.Советник по индикатору мы уже умеем делать.Буду Вам очень признателен, да и не только я, как мне кажется, если уделите данному вопросу немного Вашего внимания. Изменено 27 марта, 2016 пользователем deathmurder Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 27 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 марта, 2016 Подскажите пожалуйста, как при помощи функции iStochastic запретить покупать выше уровня 80 и продавать ниже уровня 20? Как вообще обозначить эти уровни? Справка F1 ответов не дает. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 27 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 марта, 2016 Подскажите пожалуйста, как при помощи функции iStochastic запретить покупать выше уровня 80 и продавать ниже уровня 20? Как вообще обозначить эти уровни? Справка F1 ответов не дает.У индикатора есть буфер. в нём значения ( для стоха от 0 до 100 ). Вы эти значения считываете в советнике на каждом баре и принимаете решение покупать или нет, а вот когда принимаете решение там и сравниваете полученное значение с уровнями. например: if ( stoh1 >= 80 && stoh2 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 28 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 марта, 2016 У меня такой вопрос, существуют ли библиотеки длинной арифметики в mql (т.е. числа > 64 бит. Например 512 и т.п.) или надо думать как самому реализовать?П.С. вопрос чисто познавательный Ссылка на сообщение Поделиться на другие сайты More sharing options...
oxidepro Опубликовано 28 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 марта, 2016 Добрый вечер, господа. Нужна Ваша помощь, я пишу дипломную по валютному рынку и столкнулся с проблемой, нужно добавить в советник функцию подтверждения открытия нового ордера (желательно и закрытия). То есть, советник торгует по своей стратегии, все как обычно, но когда он открывает или закрывает позицию, я должен это вручную подтвердить. Поиск особых результатов не дал, даже не знаю, как это коротко сформулировать. Прошу помочь куском кода, если это не сложно. Заранее спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 28 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 марта, 2016 Добрый вечер, господа. Нужна Ваша помощь, я пишу дипломную по валютному рынку и столкнулся с проблемой, нужно добавить в советник функцию подтверждения открытия нового ордера (желательно и закрытия). То есть, советник торгует по своей стратегии, все как обычно, но когда он открывает или закрывает позицию, я должен это вручную подтвердить. Поиск особых результатов не дал, даже не знаю, как это коротко сформулировать. Прошу помочь куском кода, если это не сложно. Заранее спасибо. Вот держите, на закрытие и модификацию аналогично// if(/* Сигнал на открытие ордреа*/) if(MessageBox("Подтвердите открытие позиции","Открытие ордера по "+Symbol(),MB_YESNO)==IDYES) { // "Открываем ордер если нажата Yes" } else if(MessageBox("Подтвердите открытие позиции","Открытие ордера по "+Symbol(),MB_YESNO)==IDNO) { Print("Пользователь отказался от открытия позиции"); } 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 28 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 марта, 2016 Думаю что лучше будет так:int res = MessageBox("Подтвердите открытие позиции","Открытие ордера по "+_Symbol,MB_YESNO);if ( res == IDYES ) { Подтверждено(); }else if ( res == IDNO ) { НЕподтверждено(); } Изменено 28 марта, 2016 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
rav Опубликовано 29 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 марта, 2016 Здравствуйте г. трейдеры и программисты!Человеку свойственно ошибаться и хорошо если есть возможность и желание свои ошибки находить,призновать и помогать исправлять. Для этого я создал эту тему,где мы могли попросить опытных программистов помочь в решении рабочих проблем индикаторов,скриптов и советников. Начал я обучатся пошаговым видеокурсом «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт» и стал я писать свой первый советник.Я взял самую простую стратегию из двух скользящих и что то так написал что советник иногда невыставляет ТейкПрофит и открывает сделки как то очень быстро на каждом тике даже недумая.Хочу понять где моя ошибка..При компеляции ошибок нету и незнаю где искть..Если у кого найдется время и желание-взгляните пожалута и помогите справитя с ошибками.. extern double Lots = 0.1;extern int TakeProfit = 150;extern int StopLoss =50;extern int SMA_1 =13;extern int Shift1 =1;extern int SMA_2 =70;extern int Shift2 =1;extern int Slippage =3;extern int Magic =123;int ticket;double TP,SL;bool a = true; bool b = false; //+------------------------------------------------------------------+int OnInit() { if (Digits ==3 || Digits == 5) { TakeProfit *=10; StopLoss *=10; Slippage *=10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+void OnDeinit(const int reason) { } //+------------------------------------------------------------------+void OnTick() { double ima =iMA(Symbol(),PERIOD_H4,SMA_1,Shift1,MODE_SMA,PRICE_CLOSE,0); double iima =iMA(Symbol(),PERIOD_H4,SMA_2,Shift2,MODE_SMA,PRICE_CLOSE,0); if (CountTrades()==b) { if (((Ask>ima)>(Ask>iima))==a) { TP = NormalizeDouble(Ask+TakeProfit*Point,Digits); SL = NormalizeDouble(Ask-StopLoss*Point,Digits); ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL,TP,"SR",Magic,0,Blue); } else { if (((Bid TP = NormalizeDouble(Bid-TakeProfit*Point,Digits); SL = NormalizeDouble(Bid+StopLoss*Point,Digits); ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"SR",Magic,0,Red); } } } //+------------------------------------------------------------------+int CountTrades (){ int count =0; for (int i=OrdersTotal()-1; i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber()==Magic) if (OrderType() == OP_BUY || OrderType() == OP_SELL) count++; } } return(count);} TEST6.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 марта, 2016 rav основная ошибка здесь: if (((Ask>ima)>(Ask>iima))==a) и if (((BidВы похоже не поняли что написали. Хотя-бы словами описали условия на вход, а то не знаю что посоветовать...Подозреваю, что вход по пересечению средних. Для этого нужно значения средних на 1 и 2 баре, примерно так:дабл мафаст1=0, маслоу1=0, мафаст2 = мафаст1, маслоу2 = маслоу1;дабл мафаст1 = има(.фаст..)дабл маслоу1 = има(.слоу..)иф ( мафаст2 == 0 или маслоу2 ==0 ) выходусловие на вход: иф ( мафаст1 > маслоу1 && мафаст2 извини, что на русском - думаю разберёшься. Ссылка на сообщение Поделиться на другие сайты More sharing options...
rav Опубликовано 29 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 марта, 2016 Спасибо 0ll !Суть стратегии проста:1) Если цена Ask > SMA 70 то рассматриваем только Buy.2) Если цена Bid 3) Когда SMA 13 пересекла SMA70 с низу вверх и Ask>SMA13 то делаем покупку на Buy.4) Когда SMA 13 пересекла SMA 70 с верху вниз и Bid5) Если цена находится где то по середине и нету чёткого сигнала на Buy или Sell то неделаем нечего = False. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 марта, 2016 Тогда так:иф ( мафаст1 > маслоу1 && мафаст2 мафаст1 ) опен ( Бай )но я думаю последнее условие лишнее, ибо когда быстрая ма идёт вверх, то она отстаёт от цены... Ссылка на сообщение Поделиться на другие сайты More sharing options...
rav Опубликовано 29 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 марта, 2016 Непонимаю почему он делает покупки Buy там где надо делать продажи Sell или не делать нечего... scrin_test6.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 марта, 2016 код файлом прикрепи Ссылка на сообщение Поделиться на другие сайты More sharing options...
rav Опубликовано 29 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 марта, 2016 я переписал условия торговли и похоже всё заработало как и предусматривается по данной стратегии..,остолось только оптимизировать значения под каждый отдельный инструмент и начинать зарабатывать денюшки..void OnTick() { double ima =iMA(Symbol(),0,SMA_1,Shift1,MODE_SMA,PRICE_CLOSE,0); double iima =iMA(Symbol(),0,SMA_2,Shift2,MODE_SMA,PRICE_CLOSE,0); if (CountTrades()==b) { if (((Ask>ima)&&(ima>iima))==a) { ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"SR",Magic,0,Blue); } else { if (((Bid ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"SR",Magic,0,Red); } } ORDER_MODIFY(); } skrin-test6-2.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 марта, 2016 Вы логику проверьте, я же дал решение, если оно Вас не устраивает, то у меня другого нет - Вам придется самому. Ссылка на сообщение Поделиться на другие сайты More sharing options...
rav Опубликовано 29 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 марта, 2016 Спасибо Вам за советы и своё время.. Советник на тестере работает отлчно..,как и предусматривается по ТС С профитом конечно пока слабовато.. много лосей.. но я думаю если ему прикрепить время работы,безубыток и трал то будет на много лучще.. :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 30 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 марта, 2016 1.В тестере когда начинаешь тестировать советник визуальный график стоит по умолчанию, он очень неудобный, и приходится включать необходимый шаблон. А можно ли встройть в код вызов нужного шаблона, чтобы не делать лишние ненужные действия._________________________________________________________________2.цикл for используется только если нужно что то перебрать, найти нужное значение или его можно использовать постоянно. Хотел перебрав бары в историй наити материнскую свечу, и уже найдя его и сохранив значения, выйти из цикла, но заметил что он работает прекрасно дальше.---------------------Можно ли цикл for использовать постоянно или не желательно! -----------> всетаки не желательно, на демо постоянно перебирает. у меня линий дергаются на каждом тике начиная перебор каждый раз все заново.__________________________________________________________________3. При обрыве связи с терминалом управление передается функций OnDeinit, а при соединений функций int OnInit() и дальше в void OnTick() Все правильно?? Изменено 30 марта, 2016 пользователем vitek01 Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 30 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 марта, 2016 1.В тестере когда начинаешь тестировать советник визуальный график стоит по умолчанию, он очень неудобный, и приходится включать необходимый шаблон. А можно ли встройть в код вызов нужного шаблона, чтобы не делать лишние ненужные действия._________________________________________________________________2.цикл for используется только если нужно что то перебрать, найти нужное значение или его можно использовать постоянно. Хотел перебрав бары в историй наити материнскую свечу, и уже найдя его и сохранив значения, выйти из цикла, но заметил что он работает прекрасно дальше.---------------------Можно ли цикл for использовать постоянно или не желательно! -----------> всетаки не желательно, на демо постоянно перебирает. у меня линий дергаются на каждом тике начиная перебор каждый раз все заново. 1 Назовите шаблон именем советника, тогда при старте тестера будет подгружаться шаблон с таким же именем как и имя у советника.2 Циклы нужно использовать по необходимости, и весьма экономно. Циклы могут сильно тормозить советника. По этому их использование должно быть максимально продуманным. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 30 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 марта, 2016 1.В тестере когда начинаешь тестировать советник визуальный график стоит по умолчанию, он очень неудобный, и приходится включать необходимый шаблон. А можно ли встройть в код вызов нужного шаблона, чтобы не делать лишние ненужные действия._________________________________________________________________2.цикл for используется только если нужно что то перебрать, найти нужное значение или его можно использовать постоянно. Хотел перебрав бары в историй наити материнскую свечу, и уже найдя его и сохранив значения, выйти из цикла, но заметил что он работает прекрасно дальше.---------------------Можно ли цикл for использовать постоянно или не желательно! -----------> всетаки не желательно, на демо постоянно перебирает. у меня линий дергаются на каждом тике начиная перебор каждый раз все заново. 1 Назовите шаблон именем советника, тогда при старте тестера будет подгружаться шаблон с таким же именем как и имя у советника.2 Циклы нужно использовать по необходимости, и весьма экономно. Циклы могут сильно тормозить советника. По этому их использование должно быть максимально продуманным. Спасибо большое! а 3 пункт вопроса не прокоментируете! Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 30 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 марта, 2016 1.В тестере когда начинаешь тестировать советник визуальный график стоит по умолчанию, он очень неудобный, и приходится включать необходимый шаблон. А можно ли встройть в код вызов нужного шаблона, чтобы не делать лишние ненужные действия._________________________________________________________________2.цикл for используется только если нужно что то перебрать, найти нужное значение или его можно использовать постоянно. Хотел перебрав бары в историй наити материнскую свечу, и уже найдя его и сохранив значения, выйти из цикла, но заметил что он работает прекрасно дальше.---------------------Можно ли цикл for использовать постоянно или не желательно! -----------> всетаки не желательно, на демо постоянно перебирает. у меня линий дергаются на каждом тике начиная перебор каждый раз все заново. 1 Назовите шаблон именем советника, тогда при старте тестера будет подгружаться шаблон с таким же именем как и имя у советника.2 Циклы нужно использовать по необходимости, и весьма экономно. Циклы могут сильно тормозить советника. По этому их использование должно быть максимально продуманным. Спасибо большое! а 3 пункт вопроса не прокоментируете! Нет, при обрыве связи советник просто замирает, при возобновлении связи продолжает свою работу.онинит вызывается в момент присоединения советника к графику, не зависимо от наличия связи.деинит вызывается в момент удаления советника с графика, не зависимо от наличия связи. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
oxidepro Опубликовано 30 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 марта, 2016 Всем привет. Задавал недавно вопрос по поводу подтверждения открытия/закрытия позиции советником, советовали MessageBox, но так ладу и не дал, не понял как это работает и как происходит обработка открытиязакрытия, понял только, что MessageBox вызывает бокс с сообщением, а что в кавычках? Помогите, господа, нерадивому студенту) прикрепляю бесплатный открытый советник. Можете показать на его примере, как это будет работать, где и как там будет располагаться эта функция. Спасибо. stochastic-automated.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 30 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 марта, 2016 Всем привет. Задавал недавно вопрос по поводу подтверждения открытия/закрытия позиции советником, советовали MessageBox, но так ладу и не дал, не понял как это работает и как происходит обработка открытиязакрытия, понял только, что MessageBox вызывает бокс с сообщением, а что в кавычках? Помогите, господа, нерадивому студенту) прикрепляю бесплатный открытый советник. Можете показать на его примере, как это будет работать, где и как там будет располагаться эта функция. Спасибо. Сделал один пример..stochastic-automated.mq4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
rav Опубликовано 30 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 марта, 2016 Компиляция ошибок и предупреждений не выдала..,на тестере работает всё чётка . А на ECN счёте неработает..просто молчит и всё.. Что делатьнепонимаю... Помогите пожалуста! :) Dzintars.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 31 марта, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 марта, 2016 Советник нарисовал линий на хай и лоу свечи, но вот при смене таймфрейма линий сбрасываются.... Что пройсходит при смене таймфрейма и как зделать так чтобы линий были устойчивы к таким переключениям??? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти