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



Пост N: 2
Зарегистрирован: 05.03.12
ссылка на сообщение  Отправлено: 05.03.12 22:36. Заголовок: Арбитраж на ценах брокеров


Предлагаю всем, у кого хватит мощности попробовать свои силы в написании арбитражного советника, работающего на разности котировок различных брокеров. Идея такова: если Bid брокера А больше Ask брокера В, то одновременно продаём лот у брокера А и покупаем лот у брокера В. Закрываемся когда цены брокеров становятся равными.

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


постоянный участник


Пост N: 346
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 14.03.12 17:55. Заголовок: Максим пишет: Что-т..


Максим пишет:

 цитата:
Что-то я не понял, зачем надо ждать 2 минуты чтобы получить данные текущего бара.(неужели даже дневные бары могут перепутаться?) И из этого хитрого цикла мы выходим по ошибке 4066, то есть результатом работы этой функции является время последнего успешного бара?



Выход из цикла осуществляется в двух случаях:
1. Получено запрошенное значение. Срабатывает строка GetLastError() != 4066, т.е. ошибки "запрошенные котировки находятся в стадии обновления" нет.
2. Прошло 2 минуты ожидания (никто не запрещает изменить это значение на любое другое, которое вы считаете более адекватным), в течение которых мы все время получали ошибку 4066 (условие выхода по break не срабатывало).

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


 цитата:
Получив это время мы можем быть уверены, что текущие Bid и Ask соответствуют этому времени?



Никакого отношения к Bid и Ask эта функция не имеет. Я показал пример получения исторических данных (времени открытия указанного бара дневного таймфрейма). Предполагается, что эксперт в это время работает на другом таймфрейме. Если вам нужно получить не время открытия, а, например, цену открытия бара, то потребуется создать подобную функцию, но внутри ее использовать другую таймсерию: iOpen, а не iTime. И таким же образом для любой другой таймсерии.
Bid и Ask - это не исторические данные. Их значения для другого символа получают при помощи запросов:

 цитата:
MarketInfo("имя символа", MODE_BID);
MarketInfo("имя символа", MODE_ASK);


Эти данные вы получаете сразу же (если правильно указали имя символа). Никакого ожидания в этом случае не нужно.


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




Пост N: 980
Зарегистрирован: 21.05.06
Откуда: Украина, Днепропетровск
ссылка на сообщение  Отправлено: 14.03.12 18:19. Заголовок: Максим пишет: Наверн..


Максим пишет:
 цитата:
Наверно это всё-таки очень забавная сказка! ) Как в фильме ДМБ: "- Вот ты, не видишь инопланетян, и я не вижу... а они есть!"

Я не ничего выдумываю.

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



Пост N: 28
Зарегистрирован: 05.03.12
ссылка на сообщение  Отправлено: 14.03.12 22:07. Заголовок: Scriptong, разве при..


Scriptong, разве при успешном завершении функции iTime, GetLastError() изменит своё значение? Все функции запрашивающие данные с сервера обновляют выходное значение GetLastError() ? А сама GetLastError() тоже с сервера запрашивается, и пока не придёт ответ советник отдыхает?


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


Пост N: 350
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 14.03.12 23:23. Заголовок: Максим пишет: разве..


Максим пишет:

 цитата:
разве при успешном завершении функции iTime, GetLastError() изменит своё значение?


Изменит. В ней будет содержаться 0 (нет ошибки).


 цитата:
Все функции запрашивающие данные с сервера обновляют выходное значение GetLastError() ?


Посмотрите здесь внизу список функций, которые не изменяют значение last_error. Все остальные функции изменяют это значение. Некоторые только в случае ошибки (таблица выше на той же странице), а остальные - всегда.


 цитата:
А сама GetLastError() тоже с сервера запрашивается, и пока не придёт ответ советник отдыхает?


Нет. Это функция, которая запрашивает состояние внутренней переменной терминала, объявляемой для каждой новой программы MQL4.
Поэтому при запросе через iTime значений, которых нет на компьютере, вы сразу же получаете значение iTime = 0, а если спросите GetLastError, то получите 4066 (дальнейшие запросы GetLastError дадут вам 0 до исполнения другой функции). При следующем запросе iTime вы получите либо запрошенные данные, либо опять 0 и ошибку в GetLastError.



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

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