АвторСообщение



Сообщение: 1
Зарегистрирован: 05.03.13
Репутация: 0
ссылка на сообщение  Отправлено: 05.03.13 08:23. Заголовок: помогите с кодом


Пишу индикатор, который рисует линии типа зиг заг на основе анализа уже имеющихся экстремумов зиг зага.
Сначала экстремумы собираю в буфера.
А вот далее нужно сравнивать пики и впадины и если, например, пики понижаются, то линия зиг зага должна рисоваться вниз, а если впадины повышаются, линия зиг зага идет вверх.
Написал вот так:
for(int i=0; i<100; i++)
{
double up = iCustom(NULL,0,"ZZ", 0, i);
double dw = iCustom(NULL,0,"ZZ", 1, i);
if(up!=2147483647) UP = High;
if(dw!=2147483647) DW = Low;

int countUP = ArraySize(UP);
int countDW = ArraySize(DW);

for(int u=0; u<countUP; u++)
{
if(UP<UP[u+1])
{
bufDn=UP;
bufUp=EMPTY_VALUE;
}
}
for(int d=0; d<countDW; d++)
{
if(DW[d]>DW[d+1])
{
bufUp=DW[d];
bufDn=EMPTY_VALUE;
}
}
}
Результат - нулевой. Подскажите, где я ошибаюсь.
Заранее - большое спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 49 , стр: 1 2 3 4 All [только новые]







Сообщение: 17
Зарегистрирован: 05.03.13
Репутация: 0
ссылка на сообщение  Отправлено: 20.05.13 17:50. Заголовок: Большое спасибо! Не ..


Большое спасибо!
Не знал о существовании дельты по времени. Только прочитав Ваш коментарий заметил, что тестирование на Н1 проходило успешно, а на М5 давало ошибку.
Код записал себе в блокнот.
Еще раз огромное спасибо!

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 20
Зарегистрирован: 05.03.13
Репутация: 0
ссылка на сообщение  Отправлено: 26.06.13 13:28. Заголовок: Графическое управление торговлей


Уважаемый Scriptong!
Решил использовать Ваш скрипт FollowPositions "Графическое управление торговлей".
Весь текст отображается иероглифами.
В чем причина и что делать?

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 118
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 1
ссылка на сообщение  Отправлено: 01.07.13 09:13. Заголовок: Добрый день. Скорее..


Добрый день.

Скорее всего, проблема заключается в том, что в ОС нет нужного шрифта. В данном случае это шрифт с именем "Courier". Выходов из ситуации два:
1. Найти такой шрифт в интернете (как ни странно, но у меня его тоже нет; тем не менее, все отображается корректно) и скопировать в папку Fonts, лежащую в папке, где установлена Windows (чаще всего - C:\Windows).
2. Изменить шрифт, используемый программой. Для этого достаточно открыть файл FollowPosistions.mq4, найти именованную константу FONT_NAME (строка 32), указать в этой строке имя другого шрифта и перекомпилировать проект (F5 или F7). Важно, чтобы новый шрифт был моноширинным (такие, как Courier New). В противном случае графика может отображаться с перекосами.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 21
Зарегистрирован: 05.03.13
Репутация: 0
ссылка на сообщение  Отправлено: 02.07.13 06:40. Заголовок: Scriptong пишет: 2...


Scriptong пишет:

 цитата:
2. Изменить шрифт


Огромное спасибо. Все вышло по второму варианту. В ОС шрифт шел как "Courier(TrueType)". Изменил название в скрипте и все столо на свои места.

Еще одна присьба: Что необходимо изменить, чтобы скрипт высвечивал для выбора только тот инструмент, на котором он открыт, а не все ордера по всем валютным парам?

И в качестве общего предложения: При работе с большим количеством ордеров, лучше прописать в таблице не только тикет, но и инструмент и отсортировать ордера по инструменту для удобства в работе.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 122
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 1
ссылка на сообщение  Отправлено: 08.07.13 18:12. Заголовок: Sergey пишет: Еще о..


Sergey пишет:

 цитата:
Еще одна присьба: Что необходимо изменить, чтобы скрипт высвечивал для выбора только тот инструмент, на котором он открыт, а не все ордера по всем валютным парам?


Файл FolllowPositions_AddPosition.mqh найти функцию AP_FindAllPositions. Строку:

 цитата:
if (OrderType() < 2) // Если найдена позиция


заменить на такую:

 цитата:
if (OrderType() < 2 && OrderSymbol() == Symbol()) // Если найдена позиция по текущему инструменту



Sergey пишет:

 цитата:
И в качестве общего предложения: При работе с большим количеством ордеров, лучше прописать в таблице не только тикет, но и инструмент и отсортировать ордера по инструменту для удобства в работе.


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

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 69
Зарегистрирован: 25.08.13
Репутация: 1
ссылка на сообщение  Отправлено: 27.10.13 12:09. Заголовок: Добрый день! Опять ..


Добрый день!

Опять я не могу найти свою старую ошибку в трейлинге. Почему не работает? Снова наверное ошибка в скобках или тому подобное.

//--- Трейлинг BUY----------------

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);
{
if (OrderTicket()!=0 && OrderType()==OP_BUY && Bid>OrderOpenPrice()+TS*Point && Bid>OrderStopLoss()+TS*Point && Bid>OrderStopLoss()+ST*Point)
{
TiketBuy=OrderTicket();
OrderModify(TiketBuy,OrderOpenPrice(),Ask-TS*Point,0,0,CLR_NONE);
}
}

//--- Трейлинг SELL----------------

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);
{
if (OrderTicket()!=0 && OrderType()==OP_SELL && Ask<OrderOpenPrice()-TS*Point && Ask<OrderStopLoss()-TS*Point && Ask<OrderStopLoss()-ST*Point)
{
TiketSell=OrderTicket();
OrderModify(TiketSell,OrderOpenPrice(),Ask-TS*Point,0,0,CLR_NONE);
}
}

Ордера BUY тралит, а SELL нет.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 233
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 29.10.13 10:48. Заголовок: Здесь сразу бросаетс..


Здесь сразу бросается в глаза вот эта функция:

 цитата:
OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);


Она в данном случае бесполезна, т. к. служит для выбора ордера по позиции в списке рабочих ордеров. Вы же, вместо номера позиции, пытаетесь передать тикет уже выбранного ордера. Нужно определить, какие исходные данные для выбора ордера у Вас есть: тикет или порядковый номер. Если нет ни того, ни другого, то нужно идти путем перебора всех ордеров списка и передвижением трала для каждого из них:

 цитата:
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS))
continue;

if (OrderSymbol() != Symbol())
continue;

if (OrderType() == OP_BUY)
{
// Трал для ордеров Buy
}

if (OrderType() == OP_SELL)
{
// Трал для ордеров Sell
}
}



Ну а далее нужно просто определиться с условиями трала, т. к. в нынешнем виде условия дублируют друг друга. Например, для классического трала условием является поддержание заданного расстояния в пунктах между ценой и Stop Loss ордера в прибыльной части ордере. Для Buy условие будет такое:

 цитата:
if (Bid > OrderOpenPrice() + TS * Point + Point / 10 && OrderStopLoss() < Bid - TS * Point - Point / 10)
OrderModify(OrderTicket(), 0, NormalizeDouble(Bid - TS * Point, Digits), OrderTakeProfit(), 0);



Соответственно для Sell:

 цитата:
if (Ask < OrderOpenPrice() - TS * Point - Point / 10 && OrderStopLoss() > Ask + TS * Point + Point / 10)
OrderModify(OrderTicket(), 0, NormalizeDouble(Ask + TS * Point, Digits), OrderTakeProfit(), 0);




Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 70
Зарегистрирован: 25.08.13
Репутация: 1
ссылка на сообщение  Отправлено: 30.10.13 20:24. Заголовок: Спасибо!..


Спасибо!

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 47
Зарегистрирован: 05.03.13
Репутация: 0
ссылка на сообщение  Отправлено: 11.11.13 11:24. Заголовок: Помогите с кодом


Возможно ли объявить двумерный массив, если колличесто его элементов вычисляется расчетным путем. Если ДА, то как это сделать.

Пример ошибки:

int k=MathGeil(все переменные положительные); - значение !=0
double Mas[3][k];

Ошибка:
k - integer number expected
] - comma or semicolon expected
Mas - variable not defined

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 241
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 11.11.13 14:08. Заголовок: Sergey пишет: Возмо..


Sergey пишет:

 цитата:
Возможно ли объявить двумерный массив, если колличесто его элементов вычисляется расчетным путем. Если ДА, то как это сделать.


Если воспринимать весь вопрос в совокупности, то ответ однозначно нет. Но, думаю, нужно пояснить имеющиеся возможности.

Проблема заключается в том, что нельзя изменить количество элементов массива во втором измерении и выше. Их всегда нужно указывать на этапе компиляции программы.
Но есть возможность изменять количество элементов в первом измерении. Для этого достаточно объявить массив неопределенного размера, а затем изменить его размер уже по ходу выполнения программы:

 цитата:
double array[]; // Объявление массива неопределенного размера
int start()
{
int newSize = ...; // Определение нового размера массива
int resSize = ArrayResize(array, newSize); // Попытка изменения размера массива
if (resSize != newSize)
{
// Ошибка изменения размера массива. Чаще всего, связано с нехваткой памяти
}
else
{
// Успешное изменение размера массива
}
}


Поэтому в приведенном примере можно поступить просто - транспонировать матрицу (поменять местами столбцы и строки массива):

 цитата:

double Mas[][3];
int k = MathGeil(все переменные положительные); - значение !=0
int resSize = ArrayResize(Mas, k);
if (resSize != k * 3)
{
// Ошибка изменения размера массива. Чаще всего, связано с нехваткой памяти
}
else
{
// Успешное изменение размера массива
}



В тех случаях, когда необходимо определять все измерения массива по ходу программы, рекомендуется использовать одномерные массивы, которые мысленно представлять как многомерные. Например, массив с измерениями 5 (первое измерение - строки) и 6 (второе измерение - столбцы) легко заменяется на массив из 30-и элементов в первом измерении. При этом если нужно обратиться к элементу, находящемуся в третьей строке (т. к. отсчет с нуля, то индекс 2) четвертого столбца (индекс - 3), то производим такие математические действия:

 цитата:
2 (индекс строки) * 6 (размер в виртуальном втором измерении) + 3 (индекс столбца) = 15


Подобным образом можно поступать с массивами любых измерений, не ограничиваясь четвертым измерением. К тому же, в памяти массивы хранятся как одномерная последовательность. Поэтому многомерные массивы - это лишь виртуальность программирования. Например, в C++ нет многомерных массивов.



Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 48
Зарегистрирован: 05.03.13
Репутация: 0
ссылка на сообщение  Отправлено: 11.11.13 15:00. Заголовок: Большое спасибо за п..


Большое спасибо за подробный ответ. Многого из сказанного нет в учебниках. Буду изучать.
Пака вышел из ситуации так.

int k=MathGeil(все переменные положительные); - значение !=0
double Mas[3][1000];

for (int i=0; i<=k; i++) - цикл заполнения второго измерения, где k<< 1000

С уважением!

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 112
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 02.01.14 12:15. Заголовок: Ести таблица Excel, ..


Есть таблица Excel, как перенести данные ячеек в двумерный массив MQL?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 367
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 1
ссылка на сообщение  Отправлено: 02.01.14 16:11. Заголовок: Sergey пишет: Есть ..


Sergey пишет:

 цитата:
Есть таблица Excel, как перенести данные ячеек в двумерный массив MQL?



С Новым Годом, Сергей!

Похожий вопрос я встречал ЗДЕСЬ и там были ссылки.

И на сайте MQL4 был код Обмен данными и управление Excel
mt4excel.dll - библиотека написанная на Delphi. При вызове DLL, инициализируется библиотека COM.

Перед использованием необходимо вызвать одну из следующих функций: ExcelOpen или ExcelOpenPattern, или ExcelOpenFile.

При вызове происходит создание OLE объекта, открывается Excel, создается новая книга и страница, или по шаблону, или загружается файл Excel (в зависимости от функции). Функция ExcelClose закрывает Excel и осовобождает OLE объект.

Писать и читать можно либо в отдельную ячейку: ExcelSetFormulaCell, ExcelSetValueCell, ExcelSetTextCell, ExcelGetValueCell, ExcelGetTextCell, ExcelGetFormulaCell

Либо в диапазон, предварительно запомнив его функцией ExcelSetRange, затем используя ExcelSetFormula например, или другие функции где требуется диапазон.

Есть ряд вспомогательных функций для управления отображением, информации о формате и т.д. Более подробно - комментарии в примере.

Для создания диаграммы функция ExcelSetDiagramma.



С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 113
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 04.01.14 17:07. Заголовок: Genry пишет: И на ..


Genry пишет:


 цитата:
И на сайте MQL4 был код Обмен данными и управление Excel



Спасибо Genry, кажется то, что нужно. Буду разбираться. У тебя завидная информационная осведамленность. Так держать!

Удачи в новом году!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 369
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 1
ссылка на сообщение  Отправлено: 04.01.14 18:33. Заголовок: Sergey пишет: У теб..


Sergey пишет:

 цитата:
У тебя завидная информационная осведамленность


В 90-х работал технологом в конторе по разработке программных систем. Основная задача - знать какое есть уже готовое ПО, чтобы
его использовать, а не изобретать велосипед. А вторая задача - проверка готового ПО на соответствие ТЗ, так что
навык остался - быть в курсе у кого и какие программы, и как они работают

Кстати, VNG_nemo в сообщении по обработке биржевых данных тоже давал ссылку на этот софт.

Sergey пишет:

 цитата:
Удачи в новом году!


Взаимно!

С уважением! Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 49 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет