Перейти к содержанию
Форекс Форум трейдеров Академии «MasterForex-V»

Рекомендуемые сообщения

  • Ответов 91
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изменил процедуру закрытия сделок. Теперь она учитывает наличие локов (частичных или полных) и закрывает замки целиком, а не каждую сделку отдельно, что удешевляет закрытие лока на величину спрэда (по крайней мере для Fibo-Forex).

 

Выкладываю новый вариант. Для тех, кому программа не нужна, а нужны лишь скрипты (например, то же закрытие сделок), могут забрать только интересующую их часть, и запускать уже по hot key, а не из моего терминальчика.

 

Слил 300 демо-баксов, пока тестировал :-)

Ссылка на комментарий
Поделиться на другие сайты

Pupil никак не могу сделать горячую клавищу ' date=' назначил горячими клавишами 1 и 2 ,но почему то они не работают ,при нажатии експерта окно выскакивает , а при нажатии гор.клавиш нет --в чём проблема ?????[/quote']

Горячая клавиша возможна только как комбинация с Alt или Ctrl (можно выбрать, по умолчанию - Alt).

Может, ты пытаешься нажать 1 и 2 без Alt или Ctrl?

 

Вот сейчас специально попробовал.

Работает 1 - и с Alt'ом, и с Ctrl'ом, если его выбрать (в соседнем поле ввода, левее того поля, где ты вводишь 1).

 

И ещё. Ты написал "при нажатии эксперта", но CloseActiveTrades - это не эксперты, а скрипты, они должны лежать в expertsscripts и появляться в папке "Скрипты", а не "Советники".

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

 

_____________________________________________________________

 

Да, FanSimple6 тоже оказался ошибочным, без отладки никак не получается сделать.

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

 

FanSimple7 отлажен на начавших идти котировках.

Значения по умолчанию выставлены такими, чтобы эта версия по умолчанию вела себя как предыдущие.

 

Выкладываю также MACrossoverDetector1.

MQL 4 станно работает со строками, и старая версия работала правильно, но в некоторых случаях в закладку "Эксперты" выводилось сообщение об использовании неинициализированной строки.

Теперь закладка "Эксперты" не засоряется ненужной информацией.

 

Внимание. FanSimple7 содержит нефатальную ошибку - неправильно отображает веер при переключении на большой timeframe.

 

Исправленную версию брать здесь.

Ссылка на комментарий
Поделиться на другие сайты

Pupil спасибо за разьяснения ,всё зароботало-- обьясни ещё закрытие позиций ---как данный скрипт посылает запрос , все вместе или поэтапно --при работе с дилером закрытие через терминал продолжается от 4 до 10 секунд ,но цена фиксированнаяя , а как будет со скриптом.за эти 10 секунд цена может уйти на 5 и более пунктов при закрытие следующих позиций.
Ссылка на комментарий
Поделиться на другие сайты

Pupil спасибо за разьяснения ' date='всё зароботало-- обьясни ещё закрытие позиций ---как данный скрипт посылает запрос , все вместе или поэтапно --при работе с дилером закрытие через терминал продолжается от 4 до 10 секунд ,но цена фиксированнаяя , а как будет со скриптом.за эти 10 секунд цена может уйти на 5 и более пунктов при закрытие следующих позиций.[/quote']

MT4 не позволяет одним запросом закрыть все сделки - эта информация дана самими разработчиками MT4.

 

В данный момент логика работы скрипта такова:

 

1. Среди всех позиций ищутся только уже открытые. Если таких нет, выводится соответствующее окно диалога, и скрипт завершается.

2. Найденные позиции сортируются по текущей прибыльности.

3. Позиции последовательно закрываются, одна за другой, начиная с самой убыточной, а заканчивая самой прибыльной.

4. Возвращаемся и повторяем действия, начиная с пункта 1, но не более трёх раз (это на случай, если не все позиции удалось закрыть с одной попытки).

 

В начале файла есть строка:

 

#define SLIPPAGE_FACTOR 1 // In spread units

Эта строка задаёт проскальзывание в единицах спреда. То есть, при значении, указанном выше, проскальзывание для фунта (при спреде для него в 4 пункта) будет равно 4 пунктам, для евро (при спреде для него в 3 пункта) - 3 пунктам.

 

Если SLIPPAGE_FACTOR сделать равным 2, то проскальзывания для фунта и евро станут 8 и 6 пунктов.

Если SLIPPAGE_FACTOR сделать равным 0, проскальзывания не будет.

 

Что это всё значит?

 

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

Проскальзывание - это указание серверу закрыть сделку по изменившейся цене, не переспрашивая пользователя, при условии, если цена изменилась не более, чем на величину проскальзывания.

Если цена изменилась более, чем на величину проскальзывания, то сервер вернёт ошибку.

В этом случае скрипт вынужден будет повторить попытку.

 

Скрипт делает до трёх попыток пройтись по всему списку незакрытых позиций и закрыть их.

Если за три попытки всё закрыть так и не удалось, выведется соответствующее окно диалога, сообщающее об этом.

 

В принципе, есть возможность закрывать встречные позиции парами.

То есть, если открыты сплошные локи, то для закрытия потребуется вдвое меньше запросов.

Можно добавить такую возможность, но пока не до этого, я же не скрипты сюда пришёл писать, а учиться грамотно работать на рынке Форекс. :)

 

Парное закрытие потребует продумывания, как лучше сделать, чтобы разумно было и не глючило, ведь встречные позиции могут быть открыты на разной количество лотов, причём могут быть "тройки", "четвёрки" и так далее, типа одна позиция в 4 лота открыта на SELL, а две позиции, в 1 и в 2 лота, - на BUY.

Причём, позиция в 1 лот самая убыточная.

Как их грамотно закрыть?

 

Можно позицию на SELL объединить с одной из позиций BUY, чтобы закрыть как встречные позиции.

С какой объединять вначале, с какой в конце?

С самой убыточной или с самой крупной (открытой на большее число лотов)?

 

Если сумма лотов встречных позиций не одинаковая, то придётся частично закрывать одиночную позицию размером в суммарную разницу лотов встречных позиций.

 

Когда лучше делать одиночное закрытие этой разницы, до парного закрытия или после?

Как при этом учитывать прибыльность каждой позиции, то есть, как расклад по прибыльности должен влиять на последовательность закрытия?

 

Вообщем, чтобы грамотно это всё реализовать, надо сначала как следует продумать все возможные варианты и выбрать правильную стратегию, а может и не одну.

 

Потом это надо всё запрограммировать и отладить. Вообщем, пока не до этого.

 

Munmar говорит, что у него очень быстро закрывает. У меня на демо, когда отлаживал, - тоже быстро закрывает.

Точнее, первую позицию - не дольше секунды, а остальные потом, действительно, - глазом не успеешь моргнуть.

 

На реале проверял один раз (или два), две позиции закрывал (liteforex), вручную я бы так быстро не закрыл. :)

 

Вот кусок лога (тот самый реал) из закладки "Эксперты" (на секунды обрати внимание, от момента запуска - 24 секунды - до окончания закрытия второй позиции - 26 секунд - прошло, соответственно, 2 секунды):

 

2006.01.09 18:46:24 CloseCurrentSymbolActiveTrades GBPUSD,M1: loaded successfully

2006.01.09 18:46:25 CloseCurrentSymbolActiveTrades GBPUSD,M1: close #997983 sell 1.00 GBPUSD at 1.7661 sl: 1.7657 at price 1.7644

2006.01.09 18:46:26 CloseCurrentSymbolActiveTrades GBPUSD,M1: close #998050 sell 1.00 GBPUSD at 1.7671 sl: 1.7657 at price 1.7644

2006.01.09 18:46:29 CloseCurrentSymbolActiveTrades GBPUSD,M1: removed

 

Вручную сможешь две позиции за две секунды закрыть? :)

А пять позиций? :)

И не ошибиться при этом в спешке, закрыть только по фунту позиции? :)

 

Больше на реале не пришлось пока наблюдать.

Ссылка на комментарий
Поделиться на другие сайты

В принципе' date=' есть возможность закрывать встречные позиции парами.

То есть, если открыты сплошные локи, то для закрытия потребуется вдвое меньше запросов... Парное закрытие потребует продумывания, как лучше сделать, чтобы разумно было и не глючило, ведь встречные позиции могут быть открыты на разной количество лотов, причём могут быть "тройки", "четвёрки" и так далее, типа одна позиция в 4 лота открыта на SELL, а две позиции, в 1 и в 2 лота, - на BUY.

Причём, позиция в 1 лот самая убыточная.

Как их грамотно закрыть?

 

Можно позицию на SELL объединить с одной из позиций BUY, чтобы закрыть как встречные позиции.

С какой объединять вначале, с какой в конце?

С самой убыточной или с самой крупной (открытой на большее число лотов)?[/quote']

 

Не врубаюсь, зачем закрывать по принципу убыточности. По размеру лота - согласен, имело бы смысл, сперва самые большие лоты крыть. А что касается встречных пар, то выигрыш тут не только в скорости, но и в цене. Так что потрудиться смысл есть :wink:

Если они имеют разный размер, кроются обе (тестировалось на Fibo-Forex), а на разницу создается новая. Так что никаких проблем нет, идет пробег по локам и кроются, не глядя на размер. В конце либо закрывается все, либо остаются сделки только в одну сторону на суммарную разницу между лотами. Смотри реализацию в моем посте чуть выше.

Ссылка на комментарий
Поделиться на другие сайты

...за эти 10 секунд цена может уйти на 5 и более пунктов при закрытие следующих позиций.

 

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

Ссылка на комментарий
Поделиться на другие сайты

В принципе' date=' есть возможность закрывать встречные позиции парами.

То есть, если открыты сплошные локи, то для закрытия потребуется вдвое меньше запросов... Парное закрытие потребует продумывания, как лучше сделать, чтобы разумно было и не глючило, ведь встречные позиции могут быть открыты на разной количество лотов, причём могут быть "тройки", "четвёрки" и так далее, типа одна позиция в 4 лота открыта на SELL, а две позиции, в 1 и в 2 лота, - на BUY.

Причём, позиция в 1 лот самая убыточная.

Как их грамотно закрыть?

 

Можно позицию на SELL объединить с одной из позиций BUY, чтобы закрыть как встречные позиции.

С какой объединять вначале, с какой в конце?

С самой убыточной или с самой крупной (открытой на большее число лотов)?[/quote']

 

Не врубаюсь, зачем закрывать по принципу убыточности. По размеру лота - согласен, имело бы смысл, сперва самые большие лоты крыть.

Я прочитал об этом правиле (не помню где) и пока принял его на веру.

Поэтому объяснить как следует, почему - так, сейчас не могу.

 

А что касается встречных пар' date=' то выигрыш тут не только в скорости, но и в цене. Так что потрудиться смысл есть :wink: [/quote']

А каков механизм образования выигрыша в цене?

 

Если они имеют разный размер' date=' кроются обе (тестировалось на Fibo-Forex), а на разницу создается новая.[/quote']

Выходит, что в этом случае закрывается как бы одна позиция, а вторая только "подзакрывается". :)

 

Так что никаких проблем нет' date=' идет пробег по локам и кроются, не глядя на размер. В конце либо закрывается все, либо остаются сделки только в одну сторону на суммарную разницу между лотами. Смотри реализацию в моем посте чуть выше.[/quote']

Я предпочитаю продумать всё как следует, вплоть до того, что скрипт сам рассказывает пользователю, что и где надо включить, если не включено, чтобы он (скрипт) смог работать. :)

Ссылка на комментарий
Поделиться на другие сайты

А каков механизм образования выигрыша в цене?.. Выходит' date=' что в этом случае закрывается как бы одна позиция, а вторая только "подзакрывается". :)[/quote']

 

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

 

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

 

Поэтому я наваял два скрипта: CloseLocks() и CloseAllOrders(). Второй вызывает первый для более выгодного закрытия локов, а потом дозакрывает остальные позы в обычном порядке.

Ссылка на комментарий
Поделиться на другие сайты

Кстати говоря, в MT4 нигде не нашел возможности без скрипта закрывать лок. В результате боялся локов именно из-за того, что они удваивают спрэд. Благодаря скрипту присоединяюсь к любителям локов. Я с вами!
Ссылка на комментарий
Поделиться на другие сайты

Преимущество закрытия локов - компенсация спрэда.

А и правда.

Вот не знал о такой халяве! :)

 

Попробуй' date=' открой замок по одной цене. Получишь -8 пунктов. Теперь закрой моим скриптом и глянь на убыток.[/quote']

Ну' date=' зачем же сразу скриптом.

Я руками проверил. :)

 

Поэтому я наваял два скрипта: CloseLocks() и CloseAllOrders(). Второй вызывает первый для более выгодного закрытия локов' date=' а потом дозакрывает остальные позы в обычном порядке.[/quote']

Да, действительно, выгодно закрывать встречные позиции, если есть.

 

Кстати говоря' date=' в MT4 нигде не нашел возможности без скрипта закрывать лок. В результате боялся локов именно из-за того, что они удваивают спрэд. Благодаря скрипту присоединяюсь к любителям локов. Я с вами![/quote']

В диалоге закрытия позиции есть выпадающий список "Тип".

Там есть среди прочих пункт "Множественное закрытие встречных позиций".

Именно с помощью этого пункта я руками проверил безспредовое закрытие одной из позиций лока, а именно ей оказывается позиция BUY, если лок симметричный.

Если несимметричный, то спред вычитается из той позиции, у которой "лотность" выше.

 

Это то, что я руками наэкспериментировал. :)

Ссылка на комментарий
Поделиться на другие сайты

Ну' date=' зачем же сразу скриптом.

Я руками проверил. :)[/quote']

 

Да, а я вот про ручной способ не знал :( Спасибочки на том!

 

Хотя руками все равно не торгую, МТС'ник я, потому как программировать умею на много порядков лучше, чем торговать. Сейчас вот поставил целью написать МТС по методе МФ + money management по Ральфу Винсу. Для этого, собственно, и пристроил довесок такой сложный к MT4.

Ссылка на комментарий
Поделиться на другие сайты

Если несимметричный' date=' то спред вычитается из той позиции, у которой "лотность" выше.[/quote']

 

Вполне естественная реакция. Несимметричный лок = симметричный лок + довесок. Спрэд берется с лока + с довеска. Т.е. в сумме получается с большей сделки. Экономится спрэд с размера симметричного лока.

 

А то, с какой сделки берется спрэд (buy или sell), какая разница-то?

Ссылка на комментарий
Поделиться на другие сайты

Добрый день.

то back.

А можно ли написать приблуду к МТ4, чтобы он качал данные не с сервера, а из файла истории (скажем м1 или м5, а лучше и то и то) по нажатию горячей клавиши. Это я думаю будет удобно для проверки стратегий на истории для тех у кого программирование вызывает трудности. Кроме того - это возможность обучаться, скажем, после работы. Открыл виртуальный счет (на этом виртуальном сервере), пришел вечером и прогнал все, что было за день, открывая разные ТФ, отслеживая союзников, со своевременной отрисовкой запаздывающих индикаторов...

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

 

Спасибо.

Ссылка на комментарий
Поделиться на другие сайты

А можно ли написать приблуду к МТ4' date=' чтобы он качал данные не с сервера, а из файла истории (скажем м1 или м5, а лучше и то и то) по нажатию горячей клавиши...[/quote']

 

Думаю, можно, но я этим заниматься не хочу. Наоборот, по мере необходимости качаю данные из MT4 в свою "приблуду". У меня вся работа кипит в моем терминальчике, а MT4 - как помощник. Так что я пас.

Ссылка на комментарий
Поделиться на другие сайты


×
×
  • Создать...