[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 417

 
okvseok:


ну, к примеру, не крутить колесико мыши (клавиши) минуты 3 влево или вправо))), а просто ввести определенную дату бара или что-то инное.

спасибо за ответ!


Жмете пробел и вводите нужную дату. 

Ответ настолько же верный, насколько и бесполезный. Полностью соответствует вопросу.  

 
TarasBY:
В нижнем левом углу графика (там, где дата), дважды кликните мышкой и в открывшемся окошке введите нужную дату в формате DD.MM.YYYY - такой "не вручной" вариант устроит?
да, спасибо огромное. все ок.
 
Run:

или другими словами можно сказать
скрипт по задумке должен грубо говоря написать n-ое количество строчек, а он пишет только одну

Для начала - процедуру открытия и закрытия файла вынесите за пределы цикла.
 

вот спасибо все заработало

  handle=FileOpen("AUDJPY.csv", FILE_READ|FILE_WRITE, '\t');
  for (int i=NumberOfCandels; i>0; i--) {
    arrowbuy = iCustom(NULL, 0, "xxx", 0, i);
    arrowsell = iCustom(NULL, 0, "xxx", 1, i);
    if(arrowbuy != EMPTY_VALUE && arrowsell == EMPTY_VALUE) {
      if(handle>0) {
        FileWrite(handle, TimeToStr(Time[i], TIME_DATE|TIME_MINUTES), " Buy");
        }
      }
    if(arrowsell != EMPTY_VALUE && arrowbuy == EMPTY_VALUE) {
      if(handle>0) {
        FileWrite(handle, TimeToStr(Time[i], TIME_DATE|TIME_MINUTES), " Sell");
        }
      }
  }
  FileClose(handle);
 
okvseok:


ну, к примеру, не крутить колесико мыши (клавиши) минуты 3 влево или вправо))), а просто ввести определенную дату бара или что-то инное.

спасибо за ответ!

Есть такая функция

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false)
Поиск бара по времени. Функция возвращает смещение бара, которому принадлежит указанное время. Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает, в зависимости от параметра exact, -1 или смещение ближайшего бара.
Параметры:
symbol   -   Символьное имя инструмента. NULL означает текущий символ.
timeframe   -   Период. Может быть одним из периодов графика. 0 означает период текущего графика.
time   -   Значение времени для поиска.
exact   -   Возвращаемое значение если бар не найден. FALSE - iBarShift возвращает ближайший. TRUE - iBarShift возвращает -1.
Пример:
  datetime some_time=D'2004.03.21 12:00';
  int      shift=iBarShift("EUROUSD",PERIOD_M1,some_time);
  Print("shift of bar with open time ",TimeToStr(some_time)," is ",shift);
 

 
Chiripaha:

: ))))))))  (без нотаций... и без комментариев)

Из двоих: вопрошающего и отвечающего, скорее, Вы, вопрошающий, не совсем понимаете что происходит с отложками, когда они срабатывают. Отложенный ордер исполняется ПО ЛЮБОЙ самой близкой цене. Правило отложки - если цена достигла ее, то сделка уйдет в рынок. И цена будет не важна. Это относится и к Стоп-Лоссам, т.к. они являются тоже отложенными ордерами, только противоположные позиции самой сделки. Это несколько отличается от сделок на бирже. Возможно, именно поэтому у Вас путаница.

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


это понятно, но я включал робота на демке! там то уж обычно всё норм открывается, что бы людей привлечь. При этом, опять же, повторяюсь, отложки открытые в ручную, открылись там где они были выставленны!
 
Ekburg:

это понятно, но я включал робота на демке! там то уж обычно всё норм открывается, что бы людей привлечь. При этом, опять же, повторяюсь, отложки открытые в ручную, открылись там где они были выставлены!

Суть в чем: Конечно, можно ради интереса попросить Вас более детально описать условия, поскольку Вы предоставили лишь общее описание: когда были установлены роботом отложки (заранее или нет; ручные примерно одинаково с роботом по времени или нет и т.п.). Но все равно Вам и в этом случае придется разбираться только с брокером, т.к. у него свой поток, который, вероятно, выстраивает очередь исполнения сделок. И предположим, если в Вашей очереди стояла ручная отложка первой, то время исполнения у отложек будет разным (включая очередь других клиентов), стало быть и цена может быть тоже разной. А если робот ставил отложки в период формировавшихся сигналов, то попадание в очередь опять же не очевидно - отсюда возможны смещения по цене исполнения. Так же может влиять размер позиций, о которых вы ничего не пишите... и т.п...

Но... все равно это лишь с брокером (ДЦ) можно выяснить. И, предполагаю, что он найдет кучу причин, которые я не упомянул. - И совет был верным: лог в руки и к брокеру, если, конечно, Вы до сих пор считаете, что ваши заявки отложенных ордеров переместились. Но только не стоит путать 2 разных понятия: Отложенный Ордер и Сделка по этому Отложенному Ордеру. Отложенный Ордер - это распоряжение - войти в рынок по любой ближайшей цене заявленным объемом. А Сделка - это та цена, по которой удалось исполнить Ваше распоряжение на заявленный объем денег (лота). - И цены у этих ордеров скорее всего (особенно на быстром рынке - на что Вам и дали ссылку) будут отличаться. У лимитных ордеров - цена заявки и цена исполнения равны (по определению).

А то, что у брокера и демо и реал не отличаются - это же хорошо! - Это говорит о том, что брокер не занимается подтасовыванием сделок, чтобы привлечь клиентов (с Ваших слов). - Разногласий не видно в данном случае.

 
Zhunko:

1. Как запускали? Надо сначала запустить без обновления. Т.е. IsRefreshRates = false. Данные обновляться не будут.

2. Потом запустить с IsRefreshRates = true. Данные обновятся.

Вот скрин 1:                                                                          скрин 2:

 

Обратите внимание на время баров. Ещё видно, что MarketInfo() берёт данные из обзора рынка.

Вот эксперт. Немного подправил. Имя инструмента вывел.


1. На одном терминале, не зависимо как, с обновлением или без них, всё-равно скрин одинаковый! Терминал скачал вместе с скриптами для теста сов на 99% котировка от Дуки. Я их залил, т.к. не прикрепляется из-за превышения размера. Вот ссылка: http://www.load.to/PqWVW2JQ75/Тиковые_котировки_для_тестера_MT4_от_DukasCopy.zip

 

 2. В любом другом терминале уже ситуация иная. Вот на Оанде, например:

2.1 Изначально в случае:

IsRefreshRates = false

 Так:

  

 2.2 Дальше в случае:

IsRefreshRates = true

 вот так.. 

 

Как можно заметить в первом режиме, цены далеко не пары AUDNZD... , а по ходу евры, а во втором режиме цены именно те, которые мы и хотели увидеть...

 Получается, что всё-таки RefreshRates() "тянет" котировки с сервера. Поддержка под спит, поэтому этот вариант ближе ежели тот, который был изначально.

 
Zhunko:
 RefreshRates() обновляет только то, с чем работает эксперт. Так вот и узнаёт. Из эксперта. Давно кто-то из Метаквотов писал об этом.


 Вадим, что-то я сомневаюсь, что RefreshRates() в курсе о том, какие инструменты нужно эксперту. Ведь не у всех экспертов задаётся в глобальных параметрах имя инструмента. Ведь так? Так... Если оно так, то возникает вопрос, по какому признаку RefreshRates() узнает рыночные данные какого инструмента обновить, а какого не обновлять?
 
Integer:

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

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

 


А с чего бы то вдруг iOpen() выкачивает данные с сервера? В документации написано же, что возвращает значение.. Значит всё-таки возвращает, а не выкачивает.
Причина обращения: