Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Block_err_130 - библиотека для MetaTrader 4
- Просмотров:
- 7731
- Рейтинг:
- Опубликован:
- 2011.03.21 08:10
- Обновлен:
- 2014.04.21 14:55
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
«Блокировка» Error 130. Стандартный метод – единое решение
Block_err_130 – проверка корректности любой торговой операции для всех типов ордеров
Источник – Учебник MQL4. Требования и ограничения при проведении торговых операций. (прим. Подразумеваются требования торгового сервера, далее читать – Требования).
Любой эксперт или скрипт (далее читать – эксперт) обязан перед проведением любой торговой операции (открытие, закрытие/удаление, модификация) с ордером, использующим «стопы», пройти проверку на Требования!
В связи с тем, что Требования носят описательный характер, возникла необходимость в создании универсальной функции:
- Описывающей Требования на MQL4;
- Пригодной для любой торговой операции, любого типа ордера;
- Простой в использовании в любом эксперте;
- Облегчающей рутинный труд экспертописателя, на ассоциативном уровне – MQL4-дипломатического посредника между экспертом и торговым сервером для проведения торговой операции.
Такая функция была создана!
Ее имя – Block_err_130 (дословный перевод – «блокировка ошибки 130»).
Несмотря на простой MQL4-код, функция Block_err_130 показала высокую эффективность, подтверждая свои основные назначения:
- Не допускать ошибки Error 130;
- Позволять комфортно работать трейдеру на близком расстоянии от рынка;
- Экспертописателю сокращать программный код своего эксперта (свойства функции), «реанимировать» эксперты (стратегии), написанные некорректно относительно Требований.
Есть у Block_err_130 и другие плюсы:
- Учтены случаи с «нулевыми стопами»;
- Простая ассоциативная логика;
- Малый размер MQL4-кода.
bool Block_err_130 (int M,int TypeOrder,double OP,double StopLoss,double TakeProfit, double NewOpenPrice,double NewStopLoss,double NewTakeProfit)
Таблица 1.
Операция |
Значение M |
Описание |
---|---|---|
Close/DEL |
1 |
Закрытие /Удаление ордера |
Open |
2 |
Открытие ордера |
Modify |
3 |
Модификация ордера |
Таблица 2 (как обычно!).
Тип ордера |
Значение Type Order |
Описание |
---|---|---|
OP_BUY |
0 |
Покупка |
OP_SELL |
1 |
Продажа |
OP_BUYLIMIT |
2 |
Отлож. ордер BUY LIMIT |
OP_SELLLIMIT |
3 |
Отлож. ордер SELL LIMIT |
OP_BUYSTOP |
4 |
Отлож. ордер BUY STOP |
OP_SELLSTOP |
5 |
Отлож. ордер SELL STOP |
Таблица 3.
Набор №1 | OP (цена открытия ордера) | StopLoss | TakeProfit |
Набор №2 | NewOpenPrice (новая цена открытия ордера) |
NewStopLoss | NewTakeProfit |
Таблица 4 (запомнить!).
Операция |
Действие 1 |
Действие 2 |
---|---|---|
Close/DEL |
Набор №1 заполнить |
Набор №2 обнулить |
Open | Набор №1 обнулить |
Набор №2 заполнить |
Modify |
Набор №1 заполнить Старые/текущие данные |
Набор №2 заполнить Новые/будущие данные |
Выводы:
- Block_err_130- функция логическая, обязательна для исполнения перед проведением каждой торговой операции для ордера любого типа;
- заполнение переменных (данными) просто, понятно.
Пример успешного использования Block_err_130 в составе другой функции CloseAllPos(int type), предназначенной для закрытия всех ордеров «по типу» (FT_CCI_0.4(+MA)mq4.mq4 - советник из серии FT_CCI, использующий «стопы», но «игнорирующий» Требования, т.е. заранее обрекающий свою стратегию на «провал» (поражение, нанесения убытка, потеря возможной прибыли).
//----------пример использования Block_err_130------------- //FT_CCI_0.4(+MA)mq4.mq4 //---- CloseAllPos(int type) до редакции вариант А.- Было------------------ //Закрываем все позиции по типу int CloseAllPos(int type) {//Описание функции: http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=72 int buy=1; int sell=1; int i,b=0;int ordertiket; if(type==1) { while(buy==1) { buy=0; for( i=0;i<OrdersTotal();i++) { if(true==OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType()==OP_BUY && OrderSymbol()==Symbol() ) {buy=1; OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);} }else{buy=0;} } if(buy==0){return(0);} } } if(type==0 ) { while(sell==1) { sell=0; for( i=0;i<OrdersTotal();i++) { if(true==OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType()==OP_SELL && OrderSymbol()==Symbol() ) {sell=1;OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); } }else{sell=0;} } if(sell==0){return(0);} } } return(0); } //----с использованием Block_err_130 вариант B.- Стало-------------------------------- //+---------Закрываем все позиции по типу-------------+ int CloseAllPos(int type) {//Описание функции: http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=72 int buy=1; int sell=1; int i,b=0; if(type==0) {while(buy==1) {buy=0; for(i=0;i<OrdersTotal();i++) {if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()) {buy=1; int Tip=OrderType(); int iTicket=OrderTicket(); double OPos=OrderOpenPrice(); double SLpos=ND(OrderStopLoss());//нормализация double TPpos=ND(OrderTakeProfit()); double Closepos=ND(OrderClosePrice()); if(Block_err_130(1,Tip,OPos,SLpos,TPpos,0,0,0)) {if(!OrderClose(iTicket,OrderLots(),Closepos,3,White)) {Alert("Ошибка закрытия № ",GetLastError()); Print("Ошибка закрытия ордера №", OrderTicket(),". Ошибка: ",GetLastError());Sleep(1000); }else PlaySound("expert.wav"); } } else{buy=0;} } if(buy==0)return(0); } } } if(type==1 ) {while(sell==1) {sell=0; for(i=0;i<OrdersTotal();i++) {if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()) {sell=1; Tip=OrderType(); iTicket=OrderTicket(); OPos=OrderOpenPrice(); SLpos=ND(OrderStopLoss()); TPpos=ND(OrderTakeProfit()); Closepos=ND(OrderClosePrice()); if(Block_err_130(1,Tip,OPos,SLpos,TPpos,0,0,0)) {if(!OrderClose(iTicket,OrderLots(),Closepos,3,White)) {Alert("Ошибка закрытия № ",GetLastError()); Print("Ошибка закрытия ордера №", OrderTicket(),". Ошибка: ",GetLastError());Sleep(1000); }else PlaySound("expert.wav"); } } }else{sell=0;} } if(sell==0)return(0); } } return(0); } //+------------------------------------------------------------------+
А. Объяснение утверждения «провала» любого советника, имеющего «стопы» и использующего данную функцию (CloseAllPos(int type)) в первоначальном варианте:
Допустим, что стратегия, советника верна, и в нужный момент он отдает приказ фукции CloseAllPos(int type) закрыть ордер (-а) определенного типа, но среди них оказался ордер с «близким стопом».
1.1. функция (CloseAllPos(int type)) в первоначальном варианте:
- «ничего не знает» ни о значении «стопов», ни об исполнении Требований;
- «упрямо требует» от торгового сервера исполнения приказа своего непосредственного начальника (советника, руководимого стратегией).
1.2. Торговый сервер отвечает неправомерным действиям функции (CloseAllPos(int type)) предупреждением советнику («желтой карточкой») - Error 130 («близкие стопы»)
1.3. В зависимости от своей стратегии по обработке Error 130 советник (и), использующий функцию (CloseAllPos(int type)), может принимать следующие действия:
- Прекратить отдачу приказов функции (CloseAllPos(int type)) и выйти (например, с Alert()), возложив дальнейшие действия с позицией на трейдера;
- Прекратить отдачу приказов функции (CloseAllPos(int type)) и «заснуть», руководствуясь принципом о движении Рынка во времени (народная мудрость: «ляг, поспи и все пройдет!») с последующим продолжением своей стратегии;
- Продолжать отдачу приказов функции (CloseAllPos(int type)). За что получает еще «желтые карточки» (Error 130) до получения «красной карточки» - блокировки сервером всех (не только неправомерных) активных действий со стороны клиентского терминала со всеми вытекающими последствиями …!
В. Объяснение утверждения, что такой «провал» можно «заблокировать» для любого советника, имеющего «стопы» и использующего данную функцию (CloseAllPos(int type)) в редактированном варианте, т.е. с использованием в CloseAllPos(int type) функции Block_err_130:
Допустим, что стратегия, советника верна, и в нужный момент он отдает приказ функции CloseAllPos(int type) закрыть ордер (а) определенного типа, но среди них оказался ордер с «близким стопом».
2.1 Функция (CloseAllPos(int type)) в редактированном варианте:
- «знает все» о значениях «стопов», и об исполнении Требований;
- «не требует» от торгового сервера исполнения неправомерного исполнения приказа своего непосредственного начальника (советника, руководимого стратегией), а терпеливо ждет момента, руководствуясь уже своей тактикой, когда исполнение Требований (Block_err_130), приказ советника и движение Рынка совпадут («во времени и ценовом пространстве»). Тогда и будет требовать от сервера правомерного исполнения приказа своего непосредственного начальника (советника, руководимого стратегией). Советник и клиентский терминал «красной карточки» не получат, а стратегия советника заработает еще одну звезду.
Выводы:
- Block_err_130 с успехом можно применять при близком расстоянии «стопов» от Рынка (например: включать в «тралы» с различным целевым назначением и стратегиями);
- Применение Block_err_130 (соблюдение исполнения Требований) обязательно в советниках, использующих «стопы» (которые в нужный момент могут стать «близкими»).
- Советники, использующие «стопы» (которые в нужный момент могут стать «близкими»), но не соблюдающие исполнения Требований, обречены в действительности на «провал», дискредитируют свою, даже самую лучшую торговую стратегию, не рекомендуются к использованию на Рынке, по сути, носят демонстрационный характер своей стратегии.
- Применение Block_err_130 (соблюдение исполнения Требований) в «демонстрационных» советниках, использующих «стопы» (которые в нужный момент могут стать «близкими»), может привести советники в «рабочее» состояние с точки зрения цивилизованной работы с торговым сервером (в противоположность предыдущему утверждению).
- Использование советников/скриптов, неправильно исполняющих или не исполняющих Требования – это залог «провала» не только стратегии для данного советника/скрипта, но и залог «провала» стратегий советников/скриптов, правильно исполняющих Требования, параллельно работающих на счете.
Это означает, что достаточно использовать хотя бы один советник/скрипт, работающий некорректно относительно метода «Блокировка Error 130», чтобы терминал мог получить «красную карточку» - блокировку сервером всех (не только неправомерных) активных действий со стороны клиентского терминала!
Бархатный путь трейдера.
- Разъяснение ситуации Error 130 («близкие стопы»):
- Пройдите по ссылке - Учебник MQL4. Требования и ограничения при проведении торговых операций (Требования);
- Нарушение Требований (Рынком или заданием параметров ордера) при активных действиях со стороны терминала (открытие, закрытие/удаление, модификация этого ордера), произведенные экспертом/скриптом или трейдером вызывает конфликтную ситуацию с торговым сервером Error 130 («близкие стопы»):
2. Основная задача функции Block_err_130 – не допустить активных действий со стороны терминала, производимых экспертом/скриптом («блокировка»), для создания конфликтной ситуации с
торговым сервером – Error 130, при условии прописки (внедрении) Block_err_130 (соблюдение исполнения Требований) в данном эксперте/скрипте.
3. Метод «Блокировка Error 130 » логически состоит:
- Из внедрения (включения) Block_err_130 (Требований) в программный (MQL4)– код советника/скрипта;
- Ииз использования Block_err_130 (Требований) перед любой торговой операцией любого ордера внутри советника
- Из запрещения использования советников/скриптов, неправильно (некорректно) исполняющих Требования, т.е. не исполняющие п.1, п.2 данного метода.
Примечания:
- Block_err_130 - функция «молчаливая», результатом ее действий будет исполнение торговой операции со стороны сервера. Однако, учитывая, что Block_err_130 - функция логическая, то она может «просигналить» о нарушении Требований в составе эксперта (например, введениемфункций Alert(), PlaySound() или Print() совместно со Sleep() (для организации паузы между сигналами)).
- Испытание советников с использованием Block_err_130 проходило на демо-счете GBPUSD. Учитывая, что источник Block_err_130 (Учебник MQL4. Требования и ограничения при проведении торговых операций. (https://book.mql4.com/ru/appendix/limits)) не ограничивается какими-либо инструментами или таймфреймами, то испытания советников с использованием Block_err_130 рекомендовано проводить на любых инструментах, любых таймфреймах.
Объявление функции в эксперте/скрипте:
#include <Block_err_130.mqh>
Block_err_130.mqh – находится в папке “include” терминала (например, C:\Program Files\ FX Trader\experts\include) .
Block_err_130 mq4– находится в папке “libraries” терминала (например, C:\Program Files\FX Trader\experts\libraries).
Исходя из того, что создание Block_err_130 было вынужденной мерой для соблюдения Требований, то применение Block_err_130 в составе эксперта/скрипта стало требованием действительности!
Советник основан на одной из разворотных моделей - МОДЕЛИ ПОГЛОЩЕНИЯ
Монитор для МТ4Открытие ордеров, контроль ММ, удобное ручное тестирование на исторических данных.
Немного модифицированный MACD и Эксперт по нему.
tral_to_closeСоветник подхватывает открытые ордера и тралит их (без модификации стоп лосса) после достижения заданной прибыльности. Будет полезен при расширении отступа установки стоп лосса (stoplevel) в период выхода новостей у некоторых брокеров.