Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 490

 
Kot:

Добрый день!


У меня есть советник, который делает определенные вычисления. Он использует разные мат операции, массивы, циклы. Результат записывает в файл. После выполнения всех действий, он должен все начать с начала. Но он делает один раз все вычисления, а на второй раз начинает и зависает, не происходит никаких действий. Подскажите может перед началом нового вычисления нужно обнулять переменные, очищать массивы или еще что-то? 

Файл закрывать не пробовали?

 
Добрый день! нужна помощь гуманитарию (мне) который пытается сделать индикатор с мельчайшими знаниями как это))) но зато есть понимание чего должно появиться)) И так:
Как запрограммировать костыль/индикатор/скрипт (в виде индикатора с вкладками "о программе, Общие, Входные параметры, Цвета, Отображение") для МТ4 чтобы он брал зааза такая данные с файла .csv, напримерформат исходного файла:
EUR;TF;1.192;1.1733
EUR;TN;1.2037;1.1663
EUR;AB1;1.1906499615;1.1797479615
CHF;TF;1.0362;1.0183
CHF;TN;1.0479;1.0121
CHF;AB1;1.03484132734247;1.02549513556164


Т.е. индикатор взял с файла данные записанные и вставил скомментарием на графикв виде отрезков (TF, TA)  или цветного диапазона
 (EA) с параметрами протяженности ровно "день" (от границы до границы вертикальных разделителей дней на МТ4), для линий выбор цвета линии, тип линии, выбор цвета текста и размера комментария и подстановка к линии отрезка комментария например в виде "TF - 1,192" вторая линия "TF - 1,1733" которые берутся с соответвующих строк файла. При этом отрезок чисто горизонтальный и из строки EUR;TF;1.192;1,1733  берет для своей гоизонтали именно первую цифру для одного отезка и вторую цифру для второго отрезка как начало отезка 1.192 и конец 1.192.
Есть и диапазоны напимер EA принцип тот же от начала до конца дня но у него парметр по цене отличается и строка начало и конец имеется CHF;AB1;1.03484132734247;1.02549513556164 начало это 
1.03484132734247 конец диапазона 1.02549513556164. Запускается при включении МТ4 (как обычный индюк стоящий на гафике), каждый день на графике и добавляет все данные именно в текущий день единожды, все нанесенные ранее линии не удаляет при этом с графика и не дублирует. При всем этом выбирает и показывает все отрезки и диапазоны на день, только там где активное окно сейчас и на других активных окнах (т.е. где запущен) (т.е. открыл пару и индикатор порисовал все отрезки и диапазоны текущего дня и успокоился и так далее по парам). 

напимер как должна выглядить вкладка индикатора Входные параметры:

Переменная________Значение
Funtik________//--Общие настройки--//
Рисовать TF________true
Рисовать TN _______true
Рисовать AB1______true
Рисовать AB2______false
Цвет текстовых надписей _______Black
Шрифт подписей__________________Arial
Размер шрифта текстовых подписей ________9
Цвет линии TF ______________
Тип линии TF _______________
Цвет линии TN ______________
Тип линии TN _______________
Цвет диапазона AB1__________
Цвет диапазона AB2__________
Частота опроса файла в секундах ______2
Название файла ___________5.csv

пытался накорябать сам,но ни черта не получается хотя вроде легкая (ну гуманитарий я че поделать....)  Помогите пожалуйста утопающему!!!!!!!! 


//+------------------------------------------------------------------+
//|                                                        Funtik.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
#property indicator_chart_window
//---- input parameters
extern string    Funtik="5.csv";
//+------------------------------------------------------------------+
//| extern variables                                       |
//+------------------------------------------------------------------+
extern  bool    РисоватьTB = false      ;
extern  bool    РисоватьTN = false      ;
extern  bool    РисоватьTF = false      ;
extern  bool    РисоватьAB1 = false     ;
extern  bool    РисоватьAB2 = false     ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
      int handle,sst=1;
     double  NameCena;
     string NameF ,NameTi,NameFT;
      bool h1;
      
   while(sst>0)
                 {
   handle=FileOpen(Funtik,FILE_CSV|FILE_READ,';');
 //  Comment ("Файл ",Funtik,"открыт");
   if(handle>=0)
    {
     NameF=FileReadString(handle);           // Читается наименование бумаги
     NameTi=FileReadString(handle);          // Читается первая котировка и подставляется в начало первого отрезка линии или диапазона
     NameCena=FileReadNumber(handle);        // Читается цена последней котировки для первого отрезка линии или диапазона
     NameFT=FileReadString(handle);          // Читается последняя котировка для диапазона
     
     Alert(NameF," ",NameTi," ",NameCena," ",NameFT);
       if(FileIsEnding(h1))
       {
     FileClose(h1);
     return(false);
     sst=0;
       }
    }
               }
     FileClose(handle);   
 
  //fComment(Funtik);
//----
   return(0);
  }
//+------------------------------------------------------------------+

 

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

Пожалуйста, помогите пож. найти ошибку след. программе!!!

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "365_MA"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int    Period_MA = 365;  //Период МА 1
extern double Delta = 0.0010;   //На каком расстоянии открывать ордер

string Symb;                  //Название торгового инструмента
//int Total;                  //количество ордеров

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
 {
//----
 
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
 {
//----
   ObjectDelete("Obj_Label");
   ObjectDelete("Obj_Label2");
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
 {
  
 

double prise = Bid;                                                             //текущая цена
double CurrMAValue = iMA(Symb, Period(),Period_MA, 0,Mode_EMA, PRICE_CLOSE, 0); //значение скользящей средней
double Price2MA = price - CurrMAValue;                                          //расстояние о МА до цены
datetime NextClose = Time(0) + Period()*60*2;                                   //время до закрытия
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1;                    //время до закрытия в минутах

//int err;



//обновление текст информации на графике

ObjectSetText ("Obj_Label", "ТФ" + Period() + ", " + DoubleToStr(price, 4) + ", тик " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10,
ObjectSetText ("Obj_Label2", "Дельта " + DoubleToStr(Delta,4) + ", знач МА " + DoubleToStr(CurrMAValue, 4) + ", расст до МА " + DoubleToStr(Price2MA, 4), 10, "Arial", DarkGreen );
//анализ цены и выдача алертов

if ((MathAbs(Price2MA) < Delta) &&   // если расстоание до МА меньше дельты
   (Price > CurrMAValue) &&          // и цена выше МА
   (Open(0) > CurrMAValue+Delta))    // и текущая свеча открылась выше, чем МА+дельта
(
   Alert ("Цена подощла к МА сверху");
)

if ((MathAbs(Price2MA) < Delta) &&   // если расстояние до МА меньше дельты
   (price < CurrMAValue) &&          // и цена ниже МА
   (Open(0) < CurrMAValue-Delta))    // и текущая свеча открылась ниже, чем МА-дельта
(

   Alert ("Цена подошла к МА снизу");
)

   return(0);
  
  
//+------------------------------------------------------------------+

После компиляции следующ. ошибка

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Куда исчезли "Сообщения"? У меня в профиле исчез раздел...
Файлы:
Error.jpg  60 kb
 
berkley75:

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

Пожалуйста, помогите пож. найти ошибку след. программе!!!


После компиляции следующ. ошибка

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "365_MA"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int    Period_MA = 365;  //Период МА 1
extern double Delta = 0.0010;   //На каком расстоянии открывать ордер

string Symb;                  //Название торгового инструмента
//int Total;                  //количество ордеров

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
 {
//----
 
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
 {
//----
   ObjectDelete("Obj_Label");
   ObjectDelete("Obj_Label2");
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
 {
   
 

double prise = Bid;                                                             //текущая цена
double CurrMAValue = iMA(Symb, Period(),Period_MA, 0,Mode_EMA, PRICE_CLOSE, 0); //значение скользящей средней
double Price2MA = price - CurrMAValue;                                          //расстояние о МА до цены
datetime NextClose = Time(0) + Period()*60*2;                                   //время до закрытия
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1;                    //время до закрытия в минутах

//int err;



//обновление текст информации на графике

ObjectSetText ("Obj_Label", "ТФ" + Period() + ", " + DoubleToStr(price, 4) + ", тик " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10,
ObjectSetText ("Obj_Label2", "Дельта " + DoubleToStr(Delta,4) + ", знач МА " + DoubleToStr(CurrMAValue, 4) + ", расст до МА " + DoubleToStr(Price2MA, 4), 10, "Arial", DarkGreen );
//анализ цены и выдача алертов

if ((MathAbs(Price2MA) < Delta) &&   // если расстоание до МА меньше дельты
   (Price > CurrMAValue) &&          // и цена выше МА
   (Open(0) > CurrMAValue+Delta))    // и текущая свеча открылась выше, чем МА+дельта
( 
   Alert ("Цена подощла к МА сверху");
)

if ((MathAbs(Price2MA) < Delta) &&   // если расстояние до МА меньше дельты
   (price < CurrMAValue) &&          // и цена ниже МА
   (Open(0) < CurrMAValue-Delta))    // и текущая свеча открылась ниже, чем МА-дельта
( 

   Alert ("Цена подошла к МА снизу");
)

   return(0);
}
   
   
//+------------------------------------------------------------------+


Фигурную скобку забыли

 
Подскажите пожалуйста как можно исправить ошибку  invalid lots amount for FreeMarginCheck function в советнике, при случайной установке отрицательного значения объёма (лота). Чтобы было сообщение о неправильном лоте, без сообщения об ошибке, в тестере
 
Roman Sharanov:

Такой вопрос, мне нужно интегрировать зигзаг в свой индюк(сейчас по хендлу считается)

Дело в том что мой индюк вообще OnCalculate() не использует, все на OnChartEvent()

Так как мне заставить работать зигзаг, откуда для его расчета мне взять rates_total и prev_calculated?

rates_total - это количество баров на графике. Определяется при помощи функции Bars.

prev_calculated - сделать аналог самому, объявив глобально (или статически) и записывать в нее реально посчитанное количество баров на текущей итерации. То есть после удачных вычислений значений индикатора нужно записать в нее количество текущих баров. Если вычисления неудачные, то лучше обнулить ее, чтобы на следующей итерации заново рассчитать значения индикатора на каждом баре в истории.

 

Re: Alekseu Fedotov

А что такое фигурная скобка, извините

 
berkley75:

Re: Alekseu Fedotov

А что такое фигурная скобка, извините

В круглых скобкиах аргумент функции sin(30)
в квадратных индекс массива  x[25]
void start()
{
   в фигурных скобках Блок операторов
}
 
Здравствуйте!Подскажите пожалуйста,как программно показать/убрать определённый символ в окне "обзор рынка".Спасибо!
 
STARIJ:
В круглых скобкиах аргумент функции sin(30)
в квадратных индекс массива  x[25]
void start()
{
   в фигурных скобках Блок операторов
}
Спасибо, всё-равно не компелируется! Даже если фигурную скобку поставить в конце, кот. я заметил!!!
Причина обращения: