Какой индекс укажете туда и запишет, если индекс выйдет из размера массива - не запишет. Автоматом, как в индикаторах, в сове размерность не увеличивается и индексация не сдвигается - надо ручками прописывать.Господа программисты, при определенном размере массива если он полностью заполнен и поступает новое значение - выдаст ошибку или перепишет самое старое?
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
Если параметр текстовый, то советник читает сайт с заданной периодичностью, находит параметр и отображает.
Если графический, то сложнее, но тоже возможно.
Необходим текстовый - без всяких наворотов. Считывание - каждые пол часа. Этот индикатор необходим для общего представления, чтобы не открывать множество различных сайтов для сбора информации для анализа ситуации.
здраствуйте. при созданий обьекта (ObjectCreate ("TREND_TEXT", OBJ_LABEL, 0, 0, 0) ),
редактирование ( ObjectSet ("TREND_TEXT", OBJPROP_FONT,"Times New Roman")) наткнулся на непонятную вещь, может кто знающий прокоментирует, что это глюк или я ошибся?
выскакивает предупреждение.
Изменено 9 декабря, 2017 пользователем vitek01
ObjectSetString
Добрый день!
Подскажите мне, можно ли какой то функцией советника, включить стандартный TS в MT4? Я понимаю, что его можно включить руками, но когда много сделок, и очень резкие движения цены, то это просто не возможно.У меня в советнике есть кнопка на экране, специально для этого, но программный TrailingStop только включается(выставляет SL) но не тралит.
Изменено 12 декабря, 2017 пользователем Сергей Попов
Свежий урок:
http://tradelikeapro.ru/pishem-ea-dlya-forex-tester/
Ребят , скажите , возможно ли с кода страницы сайта https://ru.investing.com/economic-calendar/ найти ссылки на прямые источники , которые обновляют экономические данные ?
Просил сделать урок по написанию индюка или совы Экономического календаря , но ничего подобного ни делают ., админ это очень сложно , в чем проблема ?
Добавлено: 21-12-2017 21:32:40
Тут наверное потребуются также знание PHP языка ?
Изменено 22 декабря, 2017 пользователем 4er58
4er58 нет там источника. Источников полно в инете, новостные индюки тоже есть, даже в исходном коде.
Ни одного нормально быстрого новостного индикатора в сети нету , если есть то показывают архив или дату выхода новостей , а быстро обновляемых фактических данных нету , один хлам в сети . Поэтому и просил сделать урок на основе сайта Инвестинг.
Ни одного нормально быстрого новостного индикатора в сети нету , если есть то показывают архив или дату выхода новостей , а быстро обновляемых фактических данных нету , один хлам в сети . Поэтому и просил сделать урок на основе сайта Инвестинг.
Чтобы реализовать Ваше желание создайте тему с обзором новостных источников и доступных индюков. Я думаю найдутся желающие подправить код какого-нибудь индюка на получение новостей с инвестинг. Просто нужно красиво расписать проблему.
Ни одного нормально быстрого новостного индикатора в сети нету , если есть то показывают архив или дату выхода новостей , а быстро обновляемых фактических данных нету , один хлам в сети . Поэтому и просил сделать урок на основе сайта Инвестинг.
Чтобы реализовать Ваше желание создайте тему с обзором новостных источников и доступных индюков. Я думаю найдутся желающие подправить код какого-нибудь индюка на получение новостей с инвестинг. Просто нужно красиво расписать проблему.
Я ведь просил эту тему сделать в виде урока , чтобы что то подобное можно было самому писать . Да и такая тема с уроком хорошо бы развила дополнительные возможности программирования . Павел вроде говорил что эта тема в разработке , но смущает тишина , может вы у него спросите , что бы быть в курсе событий , вы же все там начальство друг друга знаете :)
Можете узнать , будет урок или нет , чтобы ни терять время и обращаться к фрилансерам ?
Изменено 23 декабря, 2017 пользователем 4er58
По поводу урока - задайте Павлу или Сергею в личку. Я их знаю так-же как и Вас.
4er58 я исхожу из того, что Вы погружены в новостную тему и для форума Ваш обзор новостных ресурсов и индюков был-бы очень полезен, может быть всё-таки сделаете?
По поводу урока - задайте Павлу или Сергею в личку. Я их знаю так-же как и Вас.
Сергей ссылается на Павла , а Павел сказал что тема в разработке :) , если заводить новую тему , то урока мне не видать , если даже ребята напишут сей девайс , то без тщательного разбора кода я ничего не пойму , я смотрел аналогичные , для меня темный лес . Спрошу у Павлика еще раз .
Добавлено: 24-12-2017 13:42:07
Изменено 25 декабря, 2017 пользователем 4er58
Ребята как в mql4 в редакторе добавить текст и чтобы при компиляции в советнике выходил мой текст?
Хочу сделать Баланс: , просадку и тп.
Вы хотите увидеть некие параметры торговли на экране? Самое простое с помощью Comment("Баланс = ", AccountBalans())Ребята как в mql4 в редакторе добавить текст и чтобы при компиляции в советнике выходил мой текст?
Хочу сделать Баланс: , просадку и тп.
Есть вариант через Label, но он посложнее
ObjectSetText(), в справке посмотрите.
Помогите пожалуйста!!! Как мне в переменную x вставить значение котировки с которой началась торговая сессия?
Вы хотите при запуске совы в настройках увидеть актуальную цену? Я не знаю как это сделать программно, только ручками.Помогите пожалуйста!!! Как мне в переменную x вставить значение котировки с которой началась торговая сессия?
Всех форумчан с наступающим!
Меня не будет неделю - поеду в Россию сыну снег показывать. :)
Помогите пожалуйста!!! Как мне в переменную 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]);
}
Павел , или кто может , помогите пожалуйста декомпильнуть 2 новостных ex4 , первый индиктор IceFX.NewsInfo.v2.6.1 , он должен показывать актуальные данные но не хочет , второй сделан демо советником , показывает почти все что нужно .
Здравствуйте, подскажите пожалуйста. Как написать советник на базе стрелочного индикатора?(его код прикрепляю чуть ниже). Дело в том что, я не могу придумать логику, по которой должна работать данная сова, заранее спасибо.
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
Народ, всех приветствую! Что-то никак не приходит учебник из первого поста на ящик. Так должно быть? Если что-то пропустил - сильно не пинать! Так понимаю, он ушел на доработку и не вернулся? >D-b
Здравствуйте. Пишу себе советник по уровнях и вот хочу узнать как можно вытащить значения экстремумов из индикатора "ZigZag" и провести по ним уровни.
Т.е. надо вычислить номер свечи на которой появляется вершина зигзага, типа: int n = (int)(zzSize / 2) + 1;
Затем в советнике по закрытии свечи проверять наличие вершины, типа: if ( newBar() ) newV = iCustom("ZigZag",..., n)
if ( newV > 0 ) // Здесь код пересчёта уровня
Имейте в виду - в одно-буферном Зигзаге верх и низ вершины строго чередуются.
Более простой для понимания вариант - это искать в цикле на каждом новом баре 2 верхних и 2 нижних вершины и строить уровни...
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 баров?
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем