gravity
Местный знаток
Там шапки вообще нет.Думаю нет слова return
Этот работает. Но так ли как надо) я не уверен.
Открытие ордеров по двум машкам, просто чтоб проверить как работает. Но лучше к человеку по грамотнее обратиться.
Там шапки вообще нет.Думаю нет слова return
прямой порядок можно использовать только при условии что на счете работает один советник.Перебирать с конца надо только если закрываем и удаляем все ордера, не важно в каком порядке. В остальных случаях, порядок зависит от ситуации, как выгоднее.
не сталкивался, видимо исправили.А эту функцию уже исправили? Когда то столкнулся с проблемой что через несколько вызовов функция просто переставала менять размер. И глючила только если задан резерв. Убрал резерв и всё стало стабильно работать. С этим сталкивался давно, но как показывает практика, исправлений можно ждать годами и не дождаться.
Я вижу в советнике пользовательские функции. Здесь вроде не описывали как их писать. С ними удобнее однозначно, чем писать всё по порядку.Там шапки вообще нет.
Этот работает. Но так ли как надо) я не уверен.
Открытие ордеров по двум машкам, просто чтоб проверить как работает. Но лучше к человеку по грамотнее обратиться.
Неясно как встроить в int startЯ вижу в советнике пользовательские функции. Здесь вроде не описывали как их писать. С ними удобнее однозначно, чем писать всё по порядку.
По видеоурокам, которые в первом посте темы, года 2 назад, пытался учиться. Делал там задания и эти функции остались в mql примерах.Я вижу в советнике пользовательские функции. Здесь вроде не описывали как их писать. С ними удобнее однозначно, чем писать всё по порядку.
Пользовательские функции не надо встраивать в функцию работающую по событиям start(), OnStart(), Init(), OnInit(), OnTick(),... Они размещаются на глобальном уровне. А в этих функциях вызывают функцию. В этой ветке разбиралось как вызывать функции.Неясно как встроить в int start
#import "stdlib.ex4"
string ErrorDescription(int a0);
#import
#import "Shell32.dll"
int ShellExecuteW(int hwnd,string Operation,string File,string Parameters,string Directory,int ShowCmd);
#import
У зигзага есть только экстремуму (переломы). Только в этих точках есть значения буферов.Доброго времени суток. Господа, а как создать индикатор или скрипт, который подсчитывает количество зигзагов разной длины за определенный период времени? к примеру по паре евродолл за год сколько ЗигЗ до 30пп, сколько ЗигЗ от 30до 60пп, сколько ЗигЗ от 60 до 90пп и сколько ЗигЗ более 90пп
Это правильно, но как это закодить?
#property strict
#property show_inputs
input int size_step = 150; // шаг размера зиг зага
input datetime start_date = D'2019.01.01'; // стартовая дата
input int InpDepth = 12; // Depth
input int InpDeviation = 5; // Deviation
input int InpBackstep = 3; // Backstep
//+------------------------------------------------------------------+
void OnStart() {
int i;
int zz_num_max=0;
int zz_num[1]; zz_num[0] = 0;
double zz_last = 0;
for(i = 1;i<Bars;i++) {
// дошли до заданной даты, дальше не считаем
if(Time[i]<start_date) break;
// получим значение ZZ
double zz_value = iCustom(NULL,0,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,i);
// значение пустое - нет вершинки
if(zz_value <= 0.0) continue;
// расчитаем текущий зиг заг, если уже была вершина
if(zz_last!=0) {
// размер волны
int zz_size = (int)(MathAbs(zz_value - zz_last) / _Point);
// к какому шагу она относится
int zz_step = zz_size / size_step ;
// запишем какая максимальная волная была, для отображения.
// тут же изменим размер массива
if(zz_step>zz_num_max) {
zz_num_max = zz_step;
ArrayResize(zz_num,zz_step+1,100);
}
// посчитаем количество волн
zz_num[ zz_step ] ++;
}
// запишем вершину зиг зага как прошлую
zz_last = zz_value;
}
// отобразим информацию на экране
string cm="";
for(i=0;i<=zz_num_max;i++)
cm = cm+StringConcatenate("от ",(string)(size_step*i)," до ",(string)(size_step*(i+1)-1)," - ",(string)zz_num[i],"\n");
Comment(cm);
}
//+------------------------------------------------------------------+
Основы в этой ветке уже есть. Без них никак. А вот если основы уже освоены, надо дерзать, пробовать запрограммировать то что нужно самостоятельно, вооружившись справочником. Не просить готовый код, а самостоятельно писать свой. Если что то не получается, и не получается понять почему, можно спросить. Хотел что бы работало так..., написал код..., помогите понять что неправильно.Я думаю я не один такой..... желающий разобраться в основах и тонкостях языка.
А как это сделать вручную? Так же и в советнике. Советник работает с ордерами так же как и вручную.Милейшие, давайте рассмотрим как простым способом поменять в советнике стоп лосс на отложенный ордер
Пытался, пытался. Но ничего толкогого не вышло.Следующая задача.
Напишите скрипт подсчитывающий количество непрерывных серий из свеч – закрытых выше открытия (серия вверх), а также закрытых ниже открытия (серия вниз). В скрипт задается параметр – количество свеч в серии. Пример – задано во входных параметрах 6 свеч, скрипт должен вывести количество непрерывных серий из 6 свеч в одну сторону идущих подряд, отдельное значение для серий вверх и вниз. Подсчет ведется на всю глубину графика. Скрипт должен вывести количество таких непрерывных серий.
Пытайтесь дальше. Если долго мучиться, обязательно получится. Небольшая подсказка, может быть проще использовать 2 цикла.Пытался, пытался. Но ничего толкогого не вышло.
А пытался сделать через обычный цикл перебора баров.
#property strict
//+------------------------------------------------------------------+
//| Входные параметры |
//+------------------------------------------------------------------+
//input int N = 6; // Количество свечей в серии
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
// Следующая задача.
// Напишите скрипт подсчитывающий количество непрерывных серий из свеч –
// закрытых выше открытия (серия вверх), а также закрытых ниже открытия (серия вниз).
// В скрипт задается параметр – количество свеч в серии.
// Пример – задано во входных параметрах 6 свеч, скрипт должен вывести количество
// непрерывных серий из 6 свеч в одну сторону идущих подряд, отдельное значение для серий вверх и вниз.
// Подсчет ведется на всю глубину графика. Скрипт должен вывести количество таких непрерывных серий.
{
int i,down=0,up=0;
for(i=Bars-1; i>0; i--) // перебираем все бары в истории
{
if(Close[i] >Open[i] &&
Close[i-1]>Open[i-1] &&
Close[i-2]>Open[i-2] &&
Close[i-3]>Open[i-3] &&
Close[i-4]>Open[i-4]) //
{
up++;
}
if(Close[i] <Open[i] &&
Close[i-1]<Open[i-1] &&
Close[i-2]<Open[i-2] &&
Close[i-3]<Open[i-3] &&
Close[i-4]<Open[i-4]) //
{
down++;
}
}
Print(up," серий - ",/*N,*/"подряд 5 свечей вверх"); //при соблюдении условия выводим Up
Print(down," серий - ",/*N,*/"подряд 5 свечей вниз"); //при соблюдении условия выводим Down
}
//+------------------------------------------------------------------+