Light Style© by Fisana

Перейти к содержимому


Инвестиционные фонды NordFx: профессиональное управление и прозрачность


NordFX

Фотография

Создание скриптов


  • Пожалуйста, авторизуйтесь, чтобы ответить
68 ответов в этой теме

#1 Liv

Liv

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 162 сообщений

Опубликовано 05 Июнь 2007 - 05:20

Назначение скриптов достаточно простое: один раз исполниться и замолкнуть! Сделать какие-нибудь одноразовые расчёты, начертить что-нибудь, прочитать историю и записать в файл, сделать что-нибудь полезное, например, открыть ордер.... Кстати, с помощью скрипта ордер открывается несколько быстрее, чем вручную и это может помочь при "писовке".

В эту ветку мы будем записывать наши скрипты.
Удачи!

#2 Liv

Liv

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 162 сообщений

Опубликовано 05 Июнь 2007 - 05:40

Хочу представить вам простой скрипт, который расставляет линии поддержки, точки разворота, линии сопротивления согласно тем данным, которые вы введёте. Этот скрипт я написал ещё в самом начале своего прихода на Форекс, но до сих пор периодически использую. Он очень простой и вы сами прекрасно в нём разберётесь.
MQL
[color=blue;]#property[/color] [color=blue;]copyright[/color] [color=green]"Игорь Лопатин, 2006"[/color]

// указывает, что нужно обязательно выводить окно со свойствами
[color=blue;]#property[/color] [color=blue;]show_inputs[/color]

// опеределяем значения для линий
// если равно нулю - линия выводиться не будет
[color=blue;font-weight:bold]extern[/color] [color=blue;font-weight:bold]double[/color] СопротивлениеВерхнее = 0;
[color=blue;font-weight:bold]extern[/color] [color=blue;font-weight:bold]double[/color] СопротивлениеНижнее = 0;
[color=blue;font-weight:bold]extern[/color] [color=blue;font-weight:bold]double[/color] ТочкаРазворота = 0;
[color=blue;font-weight:bold]extern[/color] [color=blue;font-weight:bold]double[/color] ПоддержкаВерхняя = 0;
[color=blue;font-weight:bold]extern[/color] [color=blue;font-weight:bold]double[/color] ПоддержкаНижняя = 0;

// определяем цвета для линий
[color=blue;font-weight:bold]extern[/color] color цвСопр1 = Red;
[color=blue;font-weight:bold]extern[/color] color цвСопр2 = Chocolate;
[color=blue;font-weight:bold]extern[/color] color цвРазв = White;
[color=blue;font-weight:bold]extern[/color] color цвПодд1 = DarkTurquoise;
[color=blue;font-weight:bold]extern[/color] color цвПодд2 = Lime;

// собственно здесь всё делается
[color=blue;font-weight:bold]int[/color] start() {
 // можно изменить стиль линии на желаемый - смотрите в хелпе
 [color=blue;font-weight:bold]int[/color] СтильЛинии = [color=navy;]STYLE_DOT[/color];
 // удалим всё старое, если есть
 [color=blue;font-weight:bold]if[/color] ([color=violet;font-weight:bold]ObjectFind[/color]([color=green]"Сопр1"[/color] )!=-1) [color=violet;font-weight:bold]ObjectDelete[/color]([color=green]"Сопр1"[/color] );
 [color=blue;font-weight:bold]if[/color] ([color=violet;font-weight:bold]ObjectFind[/color]([color=green]"Сопр2"[/color] )!=-1) [color=violet;font-weight:bold]ObjectDelete[/color]([color=green]"Сопр2"[/color] );
 [color=blue;font-weight:bold]if[/color] ([color=violet;font-weight:bold]ObjectFind[/color]([color=green]"Разв"[/color] ) !=-1) [color=violet;font-weight:bold]ObjectDelete[/color]([color=green]"Разв"[/color] );
 [color=blue;font-weight:bold]if[/color] ([color=violet;font-weight:bold]ObjectFind[/color]([color=green]"Подд1"[/color] )!=-1) [color=violet;font-weight:bold]ObjectDelete[/color]([color=green]"Подд1"[/color] );
 [color=blue;font-weight:bold]if[/color] ([color=violet;font-weight:bold]ObjectFind[/color]([color=green]"Подд2"[/color] )!=-1) [color=violet;font-weight:bold]ObjectDelete[/color]([color=green]"Подд2"[/color] );
 [color=blue;font-weight:bold]if[/color] (СопротивлениеВерхнее>0) {
  // если есть верхнее сопротивление
  [color=violet;font-weight:bold]ObjectCreate[/color]([color=green]"Сопр1"[/color] ,OBJ_HLINE,0,0,СопротивлениеВерхнее);
  [color=violet;font-weight:bold]ObjectSet[/color]([color=green]"Сопр1"[/color] ,OBJPROP_COLOR,цвСопр1);
  [color=violet;font-weight:bold]ObjectSet[/color]([color=green]"Сопр1"[/color] ,OBJPROP_STYLE,СтильЛинии);
 }
 [color=blue;font-weight:bold]if[/color] (СопротивлениеНижнее>0) {
  // если есть нижнее сопротивление
  [color=violet;font-weight:bold]ObjectCreate[/color]([color=green]"Сопр2"[/color] ,OBJ_HLINE,0,0,СопротивлениеНижнее);
  [color=violet;font-weight:bold]ObjectSet[/color]([color=green]"Сопр2"[/color] ,OBJPROP_COLOR,цвСопр2);
  [color=violet;font-weight:bold]ObjectSet[/color]([color=green]"Сопр2"[/color] ,OBJPROP_STYLE,СтильЛинии);
 }
 [color=blue;font-weight:bold]if[/color] (ТочкаРазворота>0) {
  // если есть точка разворота - пивот (Pivot)
  [color=violet;font-weight:bold]ObjectCreate[/color]([color=green]"Разв"[/color] ,OBJ_HLINE,0,0,ТочкаРазворота);
  [color=violet;font-weight:bold]ObjectSet[/color]([color=green]"Разв"[/color] ,OBJPROP_COLOR,цвРазв);
  [color=violet;font-weight:bold]ObjectSet[/color]([color=green]"Разв"[/color] ,OBJPROP_STYLE,СтильЛинии);
 }
 [color=blue;font-weight:bold]if[/color] (ПоддержкаВерхняя>0) {
  // если есть верхняя поддержка
  [color=violet;font-weight:bold]ObjectCreate[/color]([color=green]"Подд1"[/color] ,OBJ_HLINE,0,0,ПоддержкаВерхняя);
  [color=violet;font-weight:bold]ObjectSet[/color]([color=green]"Подд1"[/color] ,OBJPROP_COLOR,цвПодд1);
  [color=violet;font-weight:bold]ObjectSet[/color]([color=green]"Подд1"[/color] ,OBJPROP_STYLE,СтильЛинии);
 }
 [color=blue;font-weight:bold]if[/color] (ПоддержкаНижняя>0) {
  // если есть нижняя поддержка
  [color=violet;font-weight:bold]ObjectCreate[/color]([color=green]"Подд2"[/color] ,OBJ_HLINE,0,0,ПоддержкаНижняя);
  [color=violet;font-weight:bold]ObjectSet[/color]([color=green]"Подд2"[/color] ,OBJPROP_COLOR,цвПодд2);
  [color=violet;font-weight:bold]ObjectSet[/color]([color=green]"Подд2"[/color] ,OBJPROP_STYLE,СтильЛинии);
 }
[color=blue;font-weight:bold]return[/color](0);
}


Если запустить скрипт и не ввести данных, то просто будут удалены старые линии, которые были созданы этим скриптом.
Удачи!

#3 Liv

Liv

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 162 сообщений

Опубликовано 06 Июнь 2007 - 07:25

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

Как создать новый скрипт вы уже знаете, повторять не буду.
Нам нужно только в начале опеределить следующее:
  • число лотов
    double ЧислоЛотов=1;
  • Проскальзывание
    int Проскальзывание=3;
  • Магическое число - любое, приглянувшееся целое число
    int МагическоеЧисло=2222;
  • Коментарий - всё, что угодно... :smile:
    string Коментарий = "Как мне это нравится!";
  • и наконец, цвет символа
    для продажи
    color ЦветСимвола = RED
    для покупки
    color ЦветСимвола = GREEN
Ну а теперь собственно открытие ордера в функции start()
продажа:
OrderSend(Symbol(),OP_SELL,ЧислоЛотов,Bid,Проскальзываение,0,0,Коментарий,МагическоеЧисло,0,ЦветСимвола);
или
покупка:
OrderSend(Symbol(),OP_BUY,ЧислоЛотов,Ask,Проскальзываение,0,0,Коментарий,МагическоеЧисло,0,ЦветСимвола);

Вот собственно и всё... :biggrin:

Ну, а теперь вопросы ученикам:
  • чего тут не хватает? :wink:
  • как лучше всего оформить? :cool2:
  • как лучше всего запускать? :rolleyes:

Удачи!

#4 vov_en

vov_en

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 694 сообщений

Опубликовано 08 Июнь 2007 - 02:53

MQL или MQL4?
Из текста форумов я этого не понял.
" Я не люблю, любое время года, когда на рынке профит не дают" (С)

#5 Liv

Liv

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 162 сообщений

Опубликовано 08 Июнь 2007 - 03:06

Разумеется, MQL4
Просто MQL я не знаю, а он достаточно сильно отличается! И это видно в самом коде...
Удачи!

#6 sergan

sergan

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 1 717 сообщений

Опубликовано 08 Июнь 2007 - 03:10

  • чего тут не хватает? :wink:
  • как лучше всего оформить? :cool2:
  • как лучше всего запускать? :rolleyes:

1. Нужна обработка ошибки открытия ордера
3. Нужно назначить горячую клавишу

#7 Liv

Liv

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 162 сообщений

Опубликовано 08 Июнь 2007 - 06:00

1. Нужна обработка ошибки открытия ордера
3. Нужно назначить горячую клавишу

Мне приятно видеть правильные ответы! :biggrin: :biggrin:

Ответ на второй вопрос будет такой: сделать для каждой позиции отдельный скрипт :smile:

И так, наш скрипт будет выглядеть так:
MQL
[color=blue;font-weight:bold]int[/color] start() {
 [color=blue;font-weight:bold]double[/color] ЧислоЛотов=1;
 [color=blue;font-weight:bold]int[/color] Проскальзывание=3;
 [color=blue;font-weight:bold]double[/color] СтопПотери=0;
 [color=blue;font-weight:bold]double[/color] ВзятьПрофит=0;
 [color=blue;font-weight:bold]int[/color] МагическоеЧисло=2222;
 [color=blue;font-weight:bold]datetime[/color] СрокИстечения=0;
 [color=blue;font-weight:bold]string[/color] Коментарий = [color=green]"Как мне это нравится!"[/color] ;
 color ЦветСимвола = GREEN;
 [color=blue;font-weight:bold]int[/color] Ордер=OrderSend(
[color=violet;font-weight:bold]Symbol[/color](),
[color=navy;]OP_BUY[/color],
ЧислоЛотов,
[color=red;]Ask[/color],
Проскальзывание,
СтопПотери,
ВзятьПрофит,
Коментарий,
МагическоеЧисло,
СрокИстечения,
ЦветСимвола );
 [color=blue;font-weight:bold]if[/color](Ордер<1) {
[color=blue;font-weight:bold]int[/color] error=GetLastError();
Pr[color=blue;font-weight:bold]int[/color]([color=green]"Error = "[/color] ,error,ErrorDescription(error));
 }
 [color=blue;font-weight:bold]return[/color](0);
}

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

Данный файл я назвал "купить1" и назначил ему сочетание CTRL+1. Соответственно для открытия ордера в 0,1 лота я сделал файл "купить01" (клавиши CTRL+0), для ордера в 0,5 лота - "купить05" (клавиши CTRL+5). Точно так же были сделаны скрипты открытия ордеров на продажу. Они отличаются тем, что в качестве команды используется не константа [color="#000099"]OP_BUY[/color], а константа [color="#000099"]OP_SELL[/color] и вместо цены [color="#FF0000"]Ask[/color] - цена [color="#FF0000"]Bid[/color]. Назвал я их соответственно: "продать1" (назначена клавиша ALT+1), "продать01" (клавиша ALT+0), "продать05" (клавиша ALT+5). Вот собственно и всё... :blush:

Эти скрипты достаточно хорошо помогают при пипсовке - ордера создаются быстро и меньше теряется профита! :rolleyes:

Ну, а теперь вопрос-задание. А как быть с закрытием ордеров? Предложите оптимальное решение...
Удачи!

#8 XCh

XCh

    записался

  • Пользователи
  • PipPip
  • 28 сообщений

Опубликовано 08 Июнь 2007 - 07:24

Liv,у меня в строке (Print("Error = " ,error,ErrorDescription(error));) идет ошибка-('ErrorDescription' - variable not defined) -Что это значит?

Сообщение изменено: XCh, 08 Июнь 2007 - 07:25 .


#9 Liv

Liv

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 162 сообщений

Опубликовано 08 Июнь 2007 - 08:12

Да, действительно...
Я взял текст открытия ордера с одного из моих советников. Там используется описание ошибок. Ошибки взяты из справочника. Саму функцию вы можете взять в приложенном архиве. Конечно, можно было бы дать вам задание написать её, тем более, что она очень простая, но как-то назойливо получается с моей стороны... :wink: Но желающие могут попробовать сами её написать и сравнить с той, что использую я :rolleyes:

Вложенные файлы


Удачи!

#10 Liv

Liv

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 162 сообщений

Опубликовано 10 Июнь 2007 - 12:01

Мне пришли в ЛС сообщения о том, что скрипты покупки и продажи неверно ставят TakeProfit и StopLoss. И указали, что в функцию передают величину пунктов (pips). Вот только я же нигде не говорил, о том, что там значения будут в пунктах.....

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

В начале скрипта мы изменяем тип переменных:
int СтопПотери=0;
int ВзятьПрофит=0;

Для покупки:
Ask - СтопПотери*Point,
Ask+ ВзятьПрофит*Point,

Соответственно для продажи:
Bid + СтопПотери*Point,
Bid - ВзятьПрофит*Point,

Теперь можно передавать в функцию значения в пунктах. Как вы уже догадались, Point - это величина пункта текущего инструмента в валюте котировки.
Удачи!

#11 Zubr

Zubr

    записался

  • Пользователи ST test (off)
  • PipPip
  • 19 сообщений

Опубликовано 08 Август 2007 - 09:21

Уважаемый Liv, а не могли бы Вы рассказать о том, как создавать скрипты, которые выводили бы звуковой сигнал по достижении ценой определенного уровня, либо при наступлении определенного времени.

#12 Liv

Liv

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 162 сообщений

Опубликовано 08 Август 2007 - 09:30

Для этого скрипт не нужен - в MT4 имеется встроенные функции для этого:
закладка "Сигналы" -> правой кнопкой кликнуть на пустом месте (или нажать кнопку Insert), появится окошко.... и там легко разобраться.
Удачи!

#13 altimbr

altimbr

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 317 сообщений

Опубликовано 22 Август 2007 - 12:45

Для этого скрипт не нужен - в MT4 имеется встроенные функции для этого:
закладка "Сигналы" -> правой кнопкой кликнуть на пустом месте (или нажать кнопку Insert), появится окошко.... и там легко разобраться.


Уважаемый Liv
Может у меня не тот МТ4, но я не могу настроить сигнал.
Пожалуйста, если не утруднит, обьясните подробно.

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

Буду благодарен за ответ.
Тимофеич
"Идущий - дойдёт!"

#14 Liv

Liv

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 162 сообщений

Опубликовано 22 Август 2007 - 01:27

Уважаемый Liv
Может у меня не тот МТ4, но я не могу настроить сигнал.
Пожалуйста, если не утруднит, обьясните подробно.

Нажать клавиши 'Ctrl+T' - появится (или исчезнет, если он был - тогда нажать ещё раз) окошко с надписью "Терминал". Там внизу есть несколько закладок:
"Торговля", "История счёта", "Новости", "Сигналы" и т.д....
Нас интересует закладка "Сигналы" - кликаем на ней левой кнопкой мышки. Открывается список сигналов. Конечно, если им ещё не пользовался, то там ничего нет.
Создадим сигнал:
  • кликаем правой кнопкой мышки в любом месте этого окошка
  • из появившегося меню выбираем "Создать" - открывается окошко создания сигналов
  • кликаем левой кнопкой мышки на галочке "Разрешить" - галочка должна стоять
  • из списка "Действие" выбираем "Sound" (по-аглицки - "Звук")
  • из списка "Сисмвол" выбираем инструмент, на котором работаем, напр. "EURUSD"
  • из списка "Условие" выбираем, например, "Bid>"
  • в поле "Значение" вводим значение инструмента, при превышении цены предложения которого прозвучит сигнал
  • из списка "Источник" вибираем вид звука, который будет звучать
  • можно установить свой звук, для чего нажать левой кнопкой мышки кнопку с тремя точками справа от списка сигналов
  • можно нажать кнопку "Тест" чтобы послушать как звучит этот сигнал для твоего уха
  • нажать кнопку "Ок" для записи и установки сигнала
  • или нажать кнопку "Отмена" для того, чтобы не создавать сигнал
  • ждём достижение установленного события и балдеем...... :blush:
Достаточно просто.... и если уж сейчас не получится, то стоит задуматься, а тем ли занимаешься... :ninja:

И еще вопрос: для канальной стратегии мне хотелось-бы иметь скрипт выставляющий несколько
......
Тимофеич

Тут я хотел написать "немножко не понял".... но решил написать "совсем не понял"... :glare:
Удачи!

#15 altimbr

altimbr

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 317 сообщений

Опубликовано 22 Август 2007 - 07:22

Спасибо LIV
ВСе получилось.
"Идущий - дойдёт!"




Посетителей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных пользователей

Рейтинг брокеров форекс: кто лидер, кто аутсайдер и почему?




Masterforex-V NordFX

Rambler's Top100

Принимаем Z-Payment