Уменьшаем спред. Программируем советник форекс и пишем скрипт. Часть2. Программируем Скрипт.

Продолжаем написание полуавтомата.

В Первой части мы рассмотрели суть проблемы и в принципе сформулировали ТЗ (техническое задание) для себя.

Итак сперва будем писать скрипт. Есть два варианта такого скрипта посложнее и попроще.

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

Суть более сложно  – написать скрипт, который будет запускаться прямо на кроссе, и открывать оба ордера одним заходом, но с его использование будут некоторые проблемы из-за того, что в разных ДЦ вылютные пары называются поразному, поэтому мы остановимся на более простом и более универсально скрипте. благо нам несложно нажать комбинацию сперва на одну пару а потом на вторую.

Итак перед нами стоит достаточно простая задача при написании скрипта:

1.  Необходимо продать или купить валютную пару

2. Необходимо иметь возможность определения объема сделки

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

4. Необходимо чтобы в комментах оредра чего нить было написано приятного и интересного )))

В общем мы напишем один скрипт для покупки, другой для продажи.

Для того чтобы писать код нам нужно запустить metaEditor – среду в которой будем программировать. Сделаем мы это следующим образом. Запускаем терминал, разворачиваем ветку Скрипты в окне “Навигатора”. После этого жмем на любой из скриптов ПРАВОЙ кнопкой мыши и выбираем “Создать”. После чего запускается Метаэдитор и открывается окно “Мастер создания советника”. Выбираем “Пользовательский скрипт и жмем “Далее”

Сначала мы будем писать скрипт для покупки… назовем скрипт BuyKross

В итоге создается файл BuyKross.mq4 со следующим содержимым (шаблоном):

//+——————————————————————+
//| BuyKross.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+——————————————————————+

#property copyright “Copyright © 2010, MetaQuotes Software Corp.”
#property link “http://www.metaquotes.net”

//+——————————————————————+
//| script program start function |
//+——————————————————————+
int start()
{
//—-

//—-
return(0);
}
//+——————————————————————+
По сути он абсолютно пустой… структура выглядеть будет следующим образом:

В начале нам необходимо определить набор переменных.. практически во всех скриптах он у меня примерно одинаковый:

extern double Lots=0.1; // внешняя переменная позволяет определить объем сделки, по умлочанию будет 0,1 лот
extern int Magic=12542;//тот самый магик, который необходим будет для работы с нашими ордерками советнику тоже можно и нужно изменять
int Tyk_Tyk=5;//внутренняя переменная, кол-во попыток открыть ордер
extern string text=”наш коментарий – покупаем кросс через доллар”; //наш комент во внешней переменной – пишите что хотите, это будет в стетйте потом ))
extern int TP = 1000; // количество пипсов от цены входа до ТП, пусть будет для универсальности
extern int SL = 1000; // количество пипсов от цены входа до стоплоса

слово extern означает что переменная внешняя и ее значение будет доступно для изменения при использовании скрипта прямо в терминале позже объясню как…

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

int start() – после этой фразы идет тело скрипта или советника, т.е при запуске скрипта начинается выполнение кода следующего за этой функцией (словами)

В общем код скрипта имеет следующий вид:

//+——————————————————————+
//| BuyKross.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+——————————————————————+

#property copyright “Copyright © 2010, MetaQuotes Software Corp.”
#property link “http://www.metaquotes.net”

extern double Lots=0.1; // внешняя переменная позволяет определить объем сделки, по умлочанию будет 0,1 лот
extern int Magic=12542;//тот самый магик, который необходим будет для работы с нашими ордерками советнику тоже можно и нужно изменять
int Tyk_Tyk=5;//внутренняя переменная, кол-во попыток открыть ордер
extern string text=”наш коментарий – покупаем кросс через доллар”; //наш комент во внешней переменной – пишите что хотите, это будет в стетйте потом ))
extern int TP = 1000; // количество пипсов от цены входа до ТП, пусть будет для универсальности
extern int SL = 1000; // количество пипсов отцены входа до стоплоса
//+——————————————————————+
//| script program start function |
//+——————————————————————+
int start()
{
//—-
int ticket.1=-1; // переменная тикет1 изначально имеет значение минус 1
while(ticket.1<0)//пока тикет1 меньше нуля будем выполнять код который идет далее в скобках {}
{
RefreshRates();//обновляет данные после каждого тика
price=MarketInfo(Symbol(),MODE_ASK);//переменной price присваивается котировка по символу на котором исполнен скрипт (symbol) по цене покупки (MODE_Ask)
ticket.1=OrderSend(Symbol(),OP_BUY,Lots,price,10,price-SL*Point,price+TP*Point,text,Magic,0,CLR_NONE);//пытаемя открыть ордер (orderSend)на нужной нам паре, установив ТП, стоплос присвоив магик и приписав комент, цифра 10 в данной строке означает проскальзывание
if(ticket.1<0)//если ордер установлен переменная Тикет1=1, проверяем это условие, функицей if если ордер открылся то все намана, если ордер не открылся по какойто причине, то тикет1 = -1 что меньше 0, поэтому будет выполняться то что идет далее в скобках {}
{
Alert(“Ошибка при открытии позиции Buy (“,ErrorDescription(GetLastError()),”) Tyk_Tyk”,Tyk_Tyk);//выдается сообщение об ошибке открытия и инициализируется кол-во попыток по переменной ТукТук
Sleep(2000);//задержка выполнения кода на 2000 миллисекунд
Tyk_Tyk–;//переменная туктук становится меньше на единицу
}
if(Tyk_Tyk==0){Alert(“Позиция Buy не открыта”);break;}//пробуем открыть ордер ТукТук раз и если кол-во попыток исчерапно выдаем сообщение что ордер не открыт и завершаем выполнение скрипта
}
//—-
return(0);
}
//+——————————————————————+

Я постарался расписать все по тексту в комментариях, что к чему…

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

Скачать Скрипт можно тут:

  BuyKross.mq4 (2.9 KiB, 292 hits)

Рейтинг Форекс / Forex сайтов Форекс рейтинг Форекс каталог