Форум » Консультации по программированию » Я новичок. » Ответить

Я новичок.

Anatoliy: Пишу пользовательский индикатор на основе пересечение уровни 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: Scriptong пишет: Файл почему-то удален с сервера. Хотя неделя то еще не прошла, чтобы последовало автоматическое удаление. Не знаю, мне дали 2 дня. Сейчас повторю и опишу.

Scriptong: Balbesik пишет: Не знаю, мне дали 2 дня. Сейчас повторю и опишу. Особой необходимости в индикаторе нет. Пока интересует вопрос, откуда берутся данные другого ТФ, если закачаны только минутки, интернет отключен, а вся история была предварительно удалена?

Balbesik: 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: Сейчас дали 7 дней. http://dropmefiles.com/xJAzC индикатор

Scriptong: Balbesik пишет: Сейчас дали 7 дней. http://dropmefiles.com/xJAzC индикатор Ну да. Это обычный synbar, немного переделанный на новый лад (под новый MQL4), хотя и не досконально переделанный.

Balbesik: Scriptong пишет: Ну да. Это обычный synbar, немного переделанный на новый лад (под новый MQL4), хотя и не досконально переделанный. "...переделан (прошу не смеяться) под новые билды ..." - в качестве обучения, если это недолго, как он должен быть поправь пожалуйста.

Scriptong: Скрипт для сохранения данных с графика в csv-файл не нужен. Существует штатный способ: активировать нужный график, меню Файл - Сохранить как. Balbesik пишет: в качестве обучения, если это недолго, как он должен быть поправь пожалуйста. По сути все переделано верно. Особо то и придраться не к чему. Просто резануло глаз использование класса класса памяти extern, а не input, а также возврат из функции OnInit значения -1, а не INIT_FAILED. Вот в принципе и все, т. е. косметика, не меняющая сути.

Balbesik: Scriptong пишет: По сути все переделано верно. Особо то и придраться не к чему. Просто резануло глаз использование класса класса памяти extern, а не input, а также возврат из функции OnInit значения -1, а не INIT_FAILED. Вот в принципе и все, т. е. косметика, не меняющая сути. Спасибо, Игорь! Scriptong пишет: Скрипт для сохранения данных с графика в csv-файл не нужен. Существует штатный способ: активировать нужный график, меню Файл - Сохранить как. Мне нужен. "Равновысокие бары" как таковые не имеют время. Тестер - как бы "привязывает" время - этот момент "обхожу" скриптом. Две картинки - 625 билд (иногда врет - но не так как 745, на 745 - даже "скрипт - переделка" не работает) Файл - "Сохранен как" и скриптом.

Scriptong: 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: Scriptong пишет: Тогда немного поправь скрипт, чтобы последовательность баров была правильной... Спасибо, Игорь! Появляется инструмент для работы, т.к. без соответствия реальному графику это было бессмысленно.

Anatoliy: Добрый суток, Игорь. Как получить свойства позиции??? Открытая сделка, например: магический номер, символ, комментарий, своп, комиссия, текущая цена, цена открытая сделка, прибыль/убыток, объём, Stop Loss, Take Profit, время открытия, идентификатор и тип позиции. У MQL5 есть спец. функции PositionGetString(), PositionGetInteger(), PositionGetDouble(), а в MQL4 нет, т.е. самим написать? Как?

Scriptong: Добрый день, Anatoliy. Anatoliy пишет: Как получить свойства позиции??? В MT4 и MT5 разная терминология. У МТ4 - ордера (рыночные и отложенные), у МТ5 - позиции (эквивалент рыночных ордеров МТ4) и ордера (эквивалент отложенных ордеров МТ4). В МТ4 параметры ордера можно получить одинаковым способом для рыночного и отложенного ордера. Для этого ордер сначала выбирается (OrderSelect), а потом вызываются нужные функции для запроса конкретных параметров: OrderProfit, OrderSwap, OrderStopLoss и т. д (см. здесь).

Anatoliy: Функция OrderSelect() имеет три параметры, два последняя параметра понятна, а первый параметр ticket откуда мне знать какой-то номер тикета или порядковый номер ордера в списке?

Scriptong: 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: Здравствуй, Игорь! Пара-тройка вопросов? 1. Так или иначе ты «вник» в синбар (равновысокий). Правильно ли я понимаю, что «отсечка» по времени у равновысокого бара идет, в отличии от «штатного» по Closе? 2. У тебя была ссылка на тему – «Вписать индикатор в советник». Найти не могу, все статьи пересмотрел – подскажи, пожалуйста. Хочу попробовать (проблема памяти). 3. Можешь ли МТ4 связать с МТ5 – котировки, их контроль и прочь. Это отдельно в почте, если возможно, то сориентируешь по работе.



полная версия страницы