Обучение языку MQL4 под MetaTrader 4📌

От xbms, 13 апреля, 2013 в Уголок Программиста

#4926

Господа программисты, при определенном размере массива если он полностью заполнен и поступает новое значение - выдаст ошибку или перепишет самое старое?

Какой индекс укажете туда и запишет, если индекс выйдет из размера массива - не запишет. Автоматом, как в индикаторах, в сове размерность не увеличивается и индексация не сдвигается - надо ручками прописывать.
#4927

Если параметр текстовый, то советник читает сайт с заданной периодичностью, находит параметр и отображает.
Если графический, то сложнее, но тоже возможно.



Необходим текстовый - без всяких наворотов. Считывание - каждые пол часа. Этот индикатор необходим для общего представления, чтобы не открывать множество различных сайтов для сбора информации для анализа ситуации.
#4928

здраствуйте. при созданий обьекта (ObjectCreate ("TREND_TEXT", OBJ_LABEL, 0, 0, 0) ),
редактирование ( ObjectSet ("TREND_TEXT", OBJPROP_FONT,"Times New Roman")) наткнулся на непонятную вещь, может кто знающий прокоментирует, что это глюк или я ошибся?
выскакивает предупреждение.

глюк.jpg

Изменено 9 декабря, 2017 пользователем vitek01

#4929

ObjectSetString

#4930

Добрый день!
Подскажите мне, можно ли какой то функцией советника, включить стандартный TS в MT4? Я понимаю, что его можно включить руками, но когда много сделок, и очень резкие движения цены, то это просто не возможно.У меня в советнике есть кнопка на экране, специально для этого, но программный TrailingStop только включается(выставляет SL) но не тралит.

Изменено 12 декабря, 2017 пользователем Сергей Попов

#4931

Свежий урок:
http://tradelikeapro.ru/pishem-ea-dlya-forex-tester/

#4932

Ребят , скажите , возможно ли с кода страницы сайта https://ru.investing.com/economic-calendar/ найти ссылки на прямые источники , которые обновляют экономические данные ?

Просил сделать урок по написанию индюка или совы Экономического календаря , но ничего подобного ни делают ., админ это очень сложно , в чем проблема ?


Добавлено: 21-12-2017 21:32:40

Тут наверное потребуются также знание PHP языка ?

Изменено 22 декабря, 2017 пользователем 4er58

#4933
4er58 нет там источника. Источников полно в инете, новостные индюки тоже есть, даже в исходном коде.
#4934


4er58 нет там источника. Источников полно в инете, новостные индюки тоже есть, даже в исходном коде.



Ни одного нормально быстрого новостного индикатора в сети нету , если есть то показывают архив или дату выхода новостей , а быстро обновляемых фактических данных нету , один хлам в сети . Поэтому и просил сделать урок на основе сайта Инвестинг.
#4935

Ни одного нормально быстрого новостного индикатора в сети нету , если есть то показывают архив или дату выхода новостей , а быстро обновляемых фактических данных нету , один хлам в сети . Поэтому и просил сделать урок на основе сайта Инвестинг.


Чтобы реализовать Ваше желание создайте тему с обзором новостных источников и доступных индюков. Я думаю найдутся желающие подправить код какого-нибудь индюка на получение новостей с инвестинг. Просто нужно красиво расписать проблему.
#4936


Ни одного нормально быстрого новостного индикатора в сети нету , если есть то показывают архив или дату выхода новостей , а быстро обновляемых фактических данных нету , один хлам в сети . Поэтому и просил сделать урок на основе сайта Инвестинг.


Чтобы реализовать Ваше желание создайте тему с обзором новостных источников и доступных индюков. Я думаю найдутся желающие подправить код какого-нибудь индюка на получение новостей с инвестинг. Просто нужно красиво расписать проблему.


Я ведь просил эту тему сделать в виде урока , чтобы что то подобное можно было самому писать . Да и такая тема с уроком хорошо бы развила дополнительные возможности программирования . Павел вроде говорил что эта тема в разработке , но смущает тишина , может вы у него спросите , что бы быть в курсе событий , вы же все там начальство друг друга знаете :)
Можете узнать , будет урок или нет , чтобы ни терять время и обращаться к фрилансерам ?

Изменено 23 декабря, 2017 пользователем 4er58

#4937
4er58 я исхожу из того, что Вы погружены в новостную тему и для форума Ваш обзор новостных ресурсов и индюков был-бы очень полезен, может быть всё-таки сделаете?
По поводу урока - задайте Павлу или Сергею в личку. Я их знаю так-же как и Вас.
#4938


4er58 я исхожу из того, что Вы погружены в новостную тему и для форума Ваш обзор новостных ресурсов и индюков был-бы очень полезен, может быть всё-таки сделаете?
По поводу урока - задайте Павлу или Сергею в личку. Я их знаю так-же как и Вас.



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

Добавлено: 24-12-2017 13:42:07

Изменено 25 декабря, 2017 пользователем 4er58

#4939

Ребята как в mql4 в редакторе добавить текст и чтобы при компиляции в советнике выходил мой текст?
Хочу сделать Баланс: , просадку и тп.

#4940

Ребята как в mql4 в редакторе добавить текст и чтобы при компиляции в советнике выходил мой текст?
Хочу сделать Баланс: , просадку и тп.

Вы хотите увидеть некие параметры торговли на экране? Самое простое с помощью Comment("Баланс = ", AccountBalans())
Есть вариант через Label, но он посложнее
#4941

ObjectSetText(), в справке посмотрите.

#4942

Помогите пожалуйста!!! Как мне в переменную x вставить значение котировки с которой началась торговая сессия?

Screenshot_13.png

#4943

Помогите пожалуйста!!! Как мне в переменную x вставить значение котировки с которой началась торговая сессия?

Вы хотите при запуске совы в настройках увидеть актуальную цену? Я не знаю как это сделать программно, только ручками.
Всех форумчан с наступающим!
Меня не будет неделю - поеду в Россию сыну снег показывать. :)
#4944

Помогите пожалуйста!!! Как мне в переменную x вставить значение котировки с которой началась торговая сессия?



Как то так (CSym::TodayOpenPrice()):


class CDT
{
public:
CDT() {}
~CDT() {}
static ENUM_DAY_OF_WEEK
DayOfWeek(const datetime time) { CDateTime dt; dt.DateTime(time); return(ENUM_DAY_OF_WEEK(dt.day_of_week)); }
static ENUM_DAY_OF_WEEK
DayOfWeek(void) { return(DayOfWeek(TimeCurrent())); }
static datetime DayStartTime(const datetime time) { CDateTime dt; dt.DateTime(time); dt.hour=0; dt.min=0; dt.sec=0; return(dt.DateTime()); }
static datetime DayStartTime(void) { return(DayStartTime(TimeCurrent())); }
}



class CSym
{
public:
CSym() {}
~CSym() {}
static string GetSymbol(const string symbol) { return(symbol == "" || symbol == NULL ? _Symbol : symbol); }
static datetime TodayOpenTime(const string symbol=NULL);
static double TodayOpenPrice(const string symbol=NULL);
}
//+------------------------------------------------------------------+
datetime CSym::TodayOpenTime(const string symbol=NULL)
{
datetime ses_open, ses_close;
if (!SymbolInfoSessionQuote(GetSymbol(symbol),CDT::DayOfWeek(),0,ses_open,ses_close))
_WL("eS","Unble to get session open/close info",0,return(0))
return(CDT::DayStartTime()+ses_open);
}
//+------------------------------------------------------------------+
double CSym::TodayOpenPrice(const string symbol=NULL)
{
double price_buf[];
ENUM_TIMEFRAMES tf=(ENUM_TIMEFRAMES)_Period;
tf=tf > PERIOD_D1 ? PERIOD_D1 : tf;
if (CopyOpen(GetSymbol(symbol),tf,TodayOpenTime(symbol),1,price_buf) != 1)
_WL("eS","",USR_GET_RATES_UNEXP_CNT,return(0))
return(price_buf[0]);
}
#4945

Павел , или кто может , помогите пожалуйста декомпильнуть 2 новостных ex4 , первый индиктор IceFX.NewsInfo.v2.6.1 , он должен показывать актуальные данные но не хочет , второй сделан демо советником , показывает почти все что нужно .

IceFX.NewsInfo.v2.6.1.zip6 скач.
investing.ex41 скач.

#4946

Здравствуйте, подскажите пожалуйста. Как написать советник на базе стрелочного индикатора?(его код прикрепляю чуть ниже). Дело в том что, я не могу придумать логику, по которой должна работать данная сова, заранее спасибо.
P.S. Советник не перерисовывает

Спойлер

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- input parameters
extern int NumBars=500;
extern string SoundFilename1="alert.wav";
extern string SoundFilename2="alert.wav";

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double spread;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexArrow(1,234);
spread=MarketInfo(Symbol(),MODE_SPREAD)*Point;
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() {
int counted_bars=IndicatorCounted();
//----

int artp=7;
double dartp=7.0;
double cecf=0.7;
int satb=0;
int Shift=0;
bool river=True;
double Emaxtra=0;
double widcha=0;
double TR=0;
double Values[100];
int glava=0;
double ATR=0;
int J=0;
double Weight=0;
double r=0;
double r1=0;
int p=0;
int Curr=0;
double Range1=0;
double s=2;
double f=10;
double val1=0;
double val2=0;
double h11=0;
double h12=0;
double h13=0;
double const=0;
double orig=0;
double st=0;
double h2=0;
double h1=0;
double h10=0;
double sxs=0;
double sms=0;
double temp=0;
double h5=0;
double r1s=0;
double r2s=0;
double r3s=0;
double r4s=0;
double pt=0;
double pts=0;
double r2=0;
double r3=0;
double r4=0;
double tt=0;


if( Bars if( Close[satb - 2] > Close[satb - 1]) river = True; else river = False;
Emaxtra = Close[satb - 2];
Shift=satb-3;
while(Shift>=0) {
TR = spread+ High[Shift] - Low[Shift];
if( MathAbs(spread+ High[Shift] - Close[Shift + 1]) > TR ) TR = MathAbs(spread+ High[Shift] - Close[Shift + 1]);
if( MathAbs(Low[Shift] - Close[Shift + 1]) > TR) TR = MathAbs(Low[Shift] - Close[Shift + 1]);
if (Shift == satb - 3 ) {
for(J=0;Shift Values[J] = TR;
}
}
Values[glava] = TR;
ATR = 0;
Weight = artp;
Curr = glava;
for (J = 0;J ATR += Values[Curr] * Weight;
Weight -= 1.0;
Curr--;
if (Curr == -1) Curr = artp - 1;
}
ATR = 2.0 * ATR / (dartp * (dartp + 1.0));
glava++;
if (glava == artp) glava = 0;
widcha = cecf * ATR;
if (river && Low[Shift] river = False;
Emaxtra = spread+ High[Shift];
}
if (!river && spread+ High[Shift] > Emaxtra + widcha) {
river = True;
Emaxtra = Low[Shift];
}
if (river && Low[Shift] > Emaxtra) {
Emaxtra = Low[Shift];
}
if (!river && spread+ High[Shift] Emaxtra = spread+ High[Shift];
}
Range1 = iATR(NULL,0,10,Shift);
val1 = 0;
val2 = 0;
if (river) {
if (p != 1) r1 = Low[Shift] - Range1 * s / 3.0;
if (p == 1) r1 = -1.0;
if (r1 > 0) {
val1 = r1;
val2 = 0;
} else {
val1 = 0;
val2 = 0;
}
ExtMapBuffer1[Shift]=val1;

p = 1;
} else {
if (p != 2) r1 = spread+ High[Shift] + Range1 * s / 3.0;
if (p == 2) r1 = -1.0;
if (r1 > 0) {
val1 = 0;
val2 = r1;
} else {
val1 = 0;
val2 = 0;
}
ExtMapBuffer2[Shift]=val2;

p = 2;
}
Shift--;
}

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

Изменено 10 января, 2018 пользователем 0ll

#4947

Народ, всех приветствую! Что-то никак не приходит учебник из первого поста на ящик. Так должно быть? Если что-то пропустил - сильно не пинать! Так понимаю, он ушел на доработку и не вернулся? >D-b

#4948

Здравствуйте. Пишу себе советник по уровнях и вот хочу узнать как можно вытащить значения экстремумов из индикатора "ZigZag" и провести по ним уровни.

#4949
Evendx есть разные зигзаги с 1 и 2 буферами, но суть одна - в буферах содержатся "0" между экстремумами, а когда он сформировался, то записывается цена. Сложность заключается в том, то это происходит не на 0 или 1 свече, а зависит от настроек зигзага и может быть 3, 5 и т.д.
Т.е. надо вычислить номер свечи на которой появляется вершина зигзага, типа: int n = (int)(zzSize / 2) + 1;
Затем в советнике по закрытии свечи проверять наличие вершины, типа: if ( newBar() ) newV = iCustom("ZigZag",..., n)
if ( newV > 0 ) // Здесь код пересчёта уровня
Имейте в виду - в одно-буферном Зигзаге верх и низ вершины строго чередуются.

Более простой для понимания вариант - это искать в цикле на каждом новом баре 2 верхних и 2 нижних вершины и строить уровни...
#4950


Evendx есть разные зигзаги с 1 и 2 буферами, но суть одна - в буферах содержатся "0" между экстремумами, а когда он сформировался, то записывается цена. Сложность заключается в том, то это происходит не на 0 или 1 свече, а зависит от настроек зигзага и может быть 3, 5 и т.д.
Т.е. надо вычислить номер свечи на которой появляется вершина зигзага, типа: int n = (int)(zzSize / 2) + 1;
Затем в советнике по закрытии свечи проверять наличие вершины, типа: if ( newBar() ) newV = iCustom("ZigZag",..., n)
if ( newV > 0 ) // Здесь код пересчёта уровня
Имейте в виду - в одно-буферном Зигзаге верх и низ вершины строго чередуются.

Более простой для понимания вариант - это искать в цикле на каждом новом баре 2 верхних и 2 нижних вершины и строить уровни...


А вы можете пожалуйста написать этот цикл кодом для Однобуферного ЗигЗага чтоб на выходе я мог получить отдельно все High экстремумы и Low экстремумы за последние 500 баров?

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025