Автор | Сообщение |
Anatoliy
|
| |
Сообщение: 2
Зарегистрирован: 13.07.14
Репутация:
0
|
|
Отправлено: 21.07.14 21:22. Заголовок: Я новичок.
Пишу пользовательский индикатор на основе пересечение уровни 20 и 80. Если главная линия Stochastic пересекла уровень 80 (сверху - вниз), то выводит стрелка Sell на ценовых графиках, а если главная линия Stochastic пересекла уровень 20 (снизу - верх), то стрелка Buy на ценовых графиках. #property strict #property indicator_chart_window #property indicator_buffers 2 //--- plot Buy #property indicator_type1 DRAW_ARROW #property indicator_color1 clrGreen #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot Sell #property indicator_type2 DRAW_ARROW #property indicator_color2 clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- input parameters //--- indicator buffers double BuyBuffer[]; double SellBuffer[]; //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж //+------------------------------------------------------------------+ //| Функция инициализации пользовательского индикатора | //+------------------------------------------------------------------+ int init() { //--- SetIndexBuffer(0,BuyBuffer); SetIndexArrow(0,233); SetIndexStyle(0,DRAW_ARROW); //--- SetIndexBuffer(1,SellBuffer); SetIndexArrow(1,234); SetIndexStyle(1,DRAW_ARROW); //--- SetIndexEmptyValue(0,80.0); SetIndexEmptyValue(1,20.0); //--- return(0); } //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж //+------------------------------------------------------------------+ //| Функция пользовательского индикатора итерации | //+------------------------------------------------------------------+ int start() { //--- int i, Counted_bars; double mainStoc_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1); // бар 1 double mainStoc_2 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,2); // бар 2 Counted_bars=IndicatorCounted(); // Количество просчитанных баров i=Bars-Counted_bars-1; for(i=0;i>=0;i--) { if (mainStoc_2 > 80.0 && mainStoc_1 < 80.0) SellBuffer = Low-5*Point; else SellBuffer = 0.0; if (mainStoc_2 < 20.0 && mainStoc_1 > 20.0) BuyBuffer = High+5*Point; else BuyBuffer = 0.0; } //--- return(0); } И в результатах индикатор вообще не работает. Как его исправит?
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
All
[только новые]
|
|
Balbesik
|
| |
Сообщение: 130
Зарегистрирован: 13.03.13
Репутация:
0
|
|
Отправлено: 06.11.14 21:43. Заголовок: Scriptong пишет: Фа..
Scriptong пишет: цитата: | Файл почему-то удален с сервера. Хотя неделя то еще не прошла, чтобы последовало автоматическое удаление. |
| Не знаю, мне дали 2 дня. Сейчас повторю и опишу.
|
|
|
Scriptong
|
| |
Сообщение: 927
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация:
2
|
|
Отправлено: 06.11.14 21:54. Заголовок: Balbesik пишет: Не ..
Balbesik пишет: цитата: | Не знаю, мне дали 2 дня. Сейчас повторю и опишу. |
| Особой необходимости в индикаторе нет. Пока интересует вопрос, откуда берутся данные другого ТФ, если закачаны только минутки, интернет отключен, а вся история была предварительно удалена?
|
|
|
Balbesik
|
| |
Сообщение: 132
Зарегистрирован: 13.03.13
Репутация:
0
|
|
Отправлено: 06.11.14 22:21. Заголовок: Scriptong пишет: Вс..
Scriptong пишет: цитата: | Все-таки непонятно, что за скрипт. Хотя ясно, что таким образом ты переписываешь данные с нестандартного графика в csv-файл для последующего импорта через Архив котировок. |
| int start() { int h=FileOpen(Symbol()+(string)Period()+"v1"+".csv",FILE_WRITE|FILE_ANSI|FILE_SHARE_WRITE|FILE_CSV,","); int i_Time=(int)Time[0]; for(int i=0;i<Bars-1;i++) // { FileWrite((int)h,TimeToStr(i_Time,TIME_DATE),TimeToStr(i_Time,TIME_MINUTES),Open ,High,Low,Close,Volume); i_Time-=60; } FileClose((int)h); return(0); } Я его чуть переделал под себя - наверху есть картинка, где исходный код (509 билд) и эта переделка. Scriptong пишет:
цитата: | Ты писал, что вся история в терминале удалена. После этого была закачана минутная история. Каким образом будет сформирован график М5, если терминал отключен от интернета? На мой взгляд, здесь и кроется ошибка. |
|
Да это просто переключение - график 5 мин и не нужен. Вся эта "свистопляска" на 745 билде, т.к. на 625 билде закачивает нормально, предполагаю, что импорт не работает на 745. Хотя я мог некорректно править скрипт, хотя 509 тоже закачивается нормально. Обратная установка 745 не портит закаченную историю - 625. Проверил на другом компе, другой участок истории на 745 в сравнении с экселем - ерунду 745 показывает при импорте. Коротко или импорт не работает на 745 или написание скрипта не соответствует новым правилам.
|
|
|
Balbesik
|
| |
Сообщение: 131
Зарегистрирован: 13.03.13
Репутация:
0
|
|
Отправлено: 06.11.14 21:53. Заголовок: Сейчас дали 7 дней. ..
|
|
|
Scriptong
|
| |
Сообщение: 928
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация:
2
|
|
Отправлено: 06.11.14 22:05. Заголовок: Balbesik пишет: Сей..
Balbesik пишет: Ну да. Это обычный synbar, немного переделанный на новый лад (под новый MQL4), хотя и не досконально переделанный.
|
|
|
Balbesik
|
| |
Сообщение: 133
Зарегистрирован: 13.03.13
Репутация:
0
|
|
Отправлено: 06.11.14 22:28. Заголовок: Scriptong пишет: Ну..
Scriptong пишет: цитата: | Ну да. Это обычный synbar, немного переделанный на новый лад (под новый MQL4), хотя и не досконально переделанный. |
| "...переделан (прошу не смеяться) под новые билды ..." - в качестве обучения, если это недолго, как он должен быть поправь пожалуйста.
|
|
|
Scriptong
|
| |
Сообщение: 930
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация:
2
|
|
Отправлено: 07.11.14 21:09. Заголовок: Скрипт для сохранени..
Скрипт для сохранения данных с графика в csv-файл не нужен. Существует штатный способ: активировать нужный график, меню Файл - Сохранить как. Balbesik пишет: цитата: | в качестве обучения, если это недолго, как он должен быть поправь пожалуйста. |
| По сути все переделано верно. Особо то и придраться не к чему. Просто резануло глаз использование класса класса памяти extern, а не input, а также возврат из функции OnInit значения -1, а не INIT_FAILED. Вот в принципе и все, т. е. косметика, не меняющая сути.
|
|
|
Balbesik
|
| |
Сообщение: 134
Зарегистрирован: 13.03.13
Репутация:
0
|
|
Отправлено: 07.11.14 22:13. Заголовок: Scriptong пишет: По..
Scriptong пишет: цитата: | По сути все переделано верно. Особо то и придраться не к чему. Просто резануло глаз использование класса класса памяти extern, а не input, а также возврат из функции OnInit значения -1, а не INIT_FAILED. Вот в принципе и все, т. е. косметика, не меняющая сути. |
| Спасибо, Игорь! Scriptong пишет: цитата: | Скрипт для сохранения данных с графика в csv-файл не нужен. Существует штатный способ: активировать нужный график, меню Файл - Сохранить как. |
| Мне нужен. "Равновысокие бары" как таковые не имеют время. Тестер - как бы "привязывает" время - этот момент "обхожу" скриптом. Две картинки - 625 билд (иногда врет - но не так как 745, на 745 - даже "скрипт - переделка" не работает) Файл - "Сохранен как" и скриптом.
|
|
|
Scriptong
|
| |
Сообщение: 937
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация:
2
|
|
Отправлено: 09.11.14 16:50. Заголовок: Balbesik пишет: Мне..
Balbesik пишет: цитата: | Мне нужен. "Равновысокие бары" как таковые не имеют время. Тестер - как бы "привязывает" время - этот момент "обхожу" скриптом. |
| Да, действительно. Ведь если на графике несколько баров с одинаковым временем формирования, то при импорте CSV-файла они считаются за повторяющиеся, и во внимание принимается только один из них. Тогда немного поправь скрипт, чтобы последовательность баров была правильной - от большего к меньшему по индексу, несмотря на то, что это не влияет на операцию импорта: цитата: | void OnStart() { int h = FileOpen(Symbol()+(string)Period()+"v1"+".csv",FILE_WRITE|FILE_ANSI|FILE_SHARE_WRITE|FILE_CSV,","); if (h == INVALID_HANDLE) { Alert("Ошибка создания файла №", GetLastError()); return; } datetime time = Time[0] - (Bars - 1) * 60; for (int i = Bars - 1; i >= 0; i--, time += 60) FileWrite(h, TimeToStr(time, TIME_DATE), TimeToStr(time, TIME_MINUTES), DoubleToString(Open[ i ], _Digits), DoubleToString(High[ i ], _Digits), DoubleToString(Low[ i ], _Digits), DoubleToString(Close[ i ], _Digits), Volume[ i ]); FileClose(h); } |
|
|
|
|
Balbesik
|
| |
Сообщение: 135
Зарегистрирован: 13.03.13
Репутация:
0
|
|
Отправлено: 10.11.14 13:55. Заголовок: Scriptong пишет: То..
Scriptong пишет: цитата: | Тогда немного поправь скрипт, чтобы последовательность баров была правильной... |
| Спасибо, Игорь! Появляется инструмент для работы, т.к. без соответствия реальному графику это было бессмысленно.
|
|
|
Anatoliy
|
| |
Сообщение: 27
Зарегистрирован: 13.07.14
Репутация:
0
|
|
Отправлено: 09.11.14 17:45. Заголовок: Добрый суток, Игорь...
Добрый суток, Игорь. Как получить свойства позиции??? Открытая сделка, например: магический номер, символ, комментарий, своп, комиссия, текущая цена, цена открытая сделка, прибыль/убыток, объём, Stop Loss, Take Profit, время открытия, идентификатор и тип позиции. У MQL5 есть спец. функции PositionGetString(), PositionGetInteger(), PositionGetDouble(), а в MQL4 нет, т.е. самим написать? Как?
|
|
|
|
Scriptong
|
| |
Сообщение: 938
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация:
2
|
|
Отправлено: 09.11.14 18:24. Заголовок: Добрый день, Anatoli..
Добрый день, Anatoliy. Anatoliy пишет: цитата: | Как получить свойства позиции??? |
| В MT4 и MT5 разная терминология. У МТ4 - ордера (рыночные и отложенные), у МТ5 - позиции (эквивалент рыночных ордеров МТ4) и ордера (эквивалент отложенных ордеров МТ4). В МТ4 параметры ордера можно получить одинаковым способом для рыночного и отложенного ордера. Для этого ордер сначала выбирается (OrderSelect), а потом вызываются нужные функции для запроса конкретных параметров: OrderProfit, OrderSwap, OrderStopLoss и т. д (см. здесь).
|
|
|
Anatoliy
|
| |
Сообщение: 28
Зарегистрирован: 13.07.14
Репутация:
0
|
|
Отправлено: 09.11.14 20:03. Заголовок: Функция OrderSelect(..
Функция OrderSelect() имеет три параметры, два последняя параметра понятна, а первый параметр ticket откуда мне знать какой-то номер тикета или порядковый номер ордера в списке?
|
|
|
Scriptong
|
| |
Сообщение: 939
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация:
2
|
|
Отправлено: 09.11.14 22:50. Заголовок: Anatoliy пишет: а п..
Anatoliy пишет: цитата: | а первый параметр ticket откуда мне знать какой-то номер тикета или порядковый номер ордера в списке? |
| Когда тикет неизвестен, используется перебор всего списка ордеров: цитата: | for (int i = OrdersTotal() - 1; i >= 0; i--) { if (!OrderSelect(i, SELECT_BY_POS)) continue; // критерии выбора ордера } |
| или: цитата: | for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_HYSTORY)) continue; // критерии выбора ордера } |
| Критерии выбора ордера бывают разные. Например, нас могут интересовать все ордера по текущему символу. В этом случае используем условие OrderSymbol() == Symbol(). Или, что чаще, нужны ордера с некоторым MAgic Number, который используется нашим советником для дальнейшего опознания своих ордеров. Тогда нужно условие OrderMagicNumber() == magicNumber.
|
|
|
Balbesik
|
| |
Сообщение: 136
Зарегистрирован: 13.03.13
Репутация:
0
|
|
Отправлено: 11.11.14 18:34. Заголовок: Здравствуй, Игорь! П..
Здравствуй, Игорь! Пара-тройка вопросов? 1. Так или иначе ты «вник» в синбар (равновысокий). Правильно ли я понимаю, что «отсечка» по времени у равновысокого бара идет, в отличии от «штатного» по Closе? 2. У тебя была ссылка на тему – «Вписать индикатор в советник». Найти не могу, все статьи пересмотрел – подскажи, пожалуйста. Хочу попробовать (проблема памяти). 3. Можешь ли МТ4 связать с МТ5 – котировки, их контроль и прочь. Это отдельно в почте, если возможно, то сориентируешь по работе.
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
All
[только новые]
|
|