Liv Опубликовано 5 июня, 2007 Жалоба Поделиться Опубликовано 5 июня, 2007 Назначение скриптов достаточно простое: один раз исполниться и замолкнуть! Сделать какие-нибудь одноразовые расчёты, начертить что-нибудь, прочитать историю и записать в файл, сделать что-нибудь полезное, например, открыть ордер.... Кстати, с помощью скрипта ордер открывается несколько быстрее, чем вручную и это может помочь при "писовке". В эту ветку мы будем записывать наши скрипты. Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 5 июня, 2007 Автор Жалоба Поделиться Опубликовано 5 июня, 2007 Хочу представить вам простой скрипт, который расставляет линии поддержки, точки разворота, линии сопротивления согласно тем данным, которые вы введёте. Этот скрипт я написал ещё в самом начале своего прихода на Форекс, но до сих пор периодически использую. Он очень простой и вы сами прекрасно в нём разберётесь.MQL#property copyright "Игорь Лопатин, 2006" // указывает, что нужно обязательно выводить окно со свойствами#property show_inputs // опеределяем значения для линий// если равно нулю - линия выводиться не будетextern double СопротивлениеВерхнее = 0;extern double СопротивлениеНижнее = 0;extern double ТочкаРазворота = 0;extern double ПоддержкаВерхняя = 0;extern double ПоддержкаНижняя = 0; // определяем цвета для линийextern color цвСопр1 = Red;extern color цвСопр2 = Chocolate;extern color цвРазв = White;extern color цвПодд1 = DarkTurquoise;extern color цвПодд2 = Lime; // собственно здесь всё делаетсяint start() { // можно изменить стиль линии на желаемый - смотрите в хелпе int СтильЛинии = STYLE_DOT; // удалим всё старое, если есть if (ObjectFind("Сопр1" )!=-1) ObjectDelete("Сопр1" ); if (ObjectFind("Сопр2" )!=-1) ObjectDelete("Сопр2" ); if (ObjectFind("Разв" ) !=-1) ObjectDelete("Разв" ); if (ObjectFind("Подд1" )!=-1) ObjectDelete("Подд1" ); if (ObjectFind("Подд2" )!=-1) ObjectDelete("Подд2" ); if (СопротивлениеВерхнее>0) { // если есть верхнее сопротивление ObjectCreate("Сопр1" ,OBJ_HLINE,0,0,СопротивлениеВерхнее); ObjectSet("Сопр1" ,OBJPROP_COLOR,цвСопр1); ObjectSet("Сопр1" ,OBJPROP_STYLE,СтильЛинии); } if (СопротивлениеНижнее>0) { // если есть нижнее сопротивление ObjectCreate("Сопр2" ,OBJ_HLINE,0,0,СопротивлениеНижнее); ObjectSet("Сопр2" ,OBJPROP_COLOR,цвСопр2); ObjectSet("Сопр2" ,OBJPROP_STYLE,СтильЛинии); } if (ТочкаРазворота>0) { // если есть точка разворота - пивот (Pivot) ObjectCreate("Разв" ,OBJ_HLINE,0,0,ТочкаРазворота); ObjectSet("Разв" ,OBJPROP_COLOR,цвРазв); ObjectSet("Разв" ,OBJPROP_STYLE,СтильЛинии); } if (ПоддержкаВерхняя>0) { // если есть верхняя поддержка ObjectCreate("Подд1" ,OBJ_HLINE,0,0,ПоддержкаВерхняя); ObjectSet("Подд1" ,OBJPROP_COLOR,цвПодд1); ObjectSet("Подд1" ,OBJPROP_STYLE,СтильЛинии); } if (ПоддержкаНижняя>0) { // если есть нижняя поддержка ObjectCreate("Подд2" ,OBJ_HLINE,0,0,ПоддержкаНижняя); ObjectSet("Подд2" ,OBJPROP_COLOR,цвПодд2); ObjectSet("Подд2" ,OBJPROP_STYLE,СтильЛинии); } return(0);} Если запустить скрипт и не ввести данных, то просто будут удалены старые линии, которые были созданы этим скриптом. Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 6 июня, 2007 Автор Жалоба Поделиться Опубликовано 6 июня, 2007 Сегодня мы напишем два скрипта, с помощью которых можно быстро открывать ордера на покупку или продажу. Как создать новый скрипт вы уже знаете, повторять не буду.Нам нужно только в начале опеределить следующее:число лотовdouble ЧислоЛотов=1;Проскальзываниеint Проскальзывание=3;Магическое число - любое, приглянувшееся целое числоint МагическоеЧисло=2222;Коментарий - всё, что угодно... string Коментарий = "Как мне это нравится!";и наконец, цвет символадля продажиcolor ЦветСимвола = REDдля покупкиcolor ЦветСимвола = GREENНу а теперь собственно открытие ордера в функции start()продажа:OrderSend(Symbol(),OP_SELL,ЧислоЛотов,Bid,Проскальзываение,0,0,Коментарий,МагическоеЧисло,0,ЦветСимвола);илипокупка:OrderSend(Symbol(),OP_BUY,ЧислоЛотов,Ask,Проскальзываение,0,0,Коментарий,МагическоеЧисло,0,ЦветСимвола); Вот собственно и всё... Ну, а теперь вопросы ученикам: чего тут не хватает? как лучше всего оформить? как лучше всего запускать? Ссылка на комментарий Поделиться на другие сайты Поделиться
vov_en Опубликовано 8 июня, 2007 Жалоба Поделиться Опубликовано 8 июня, 2007 MQL или MQL4?Из текста форумов я этого не понял. Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 8 июня, 2007 Автор Жалоба Поделиться Опубликовано 8 июня, 2007 Разумеется, MQL4Просто MQL я не знаю, а он достаточно сильно отличается! И это видно в самом коде... Ссылка на комментарий Поделиться на другие сайты Поделиться
sergan Опубликовано 8 июня, 2007 Жалоба Поделиться Опубликовано 8 июня, 2007 чего тут не хватает? как лучше всего оформить? как лучше всего запускать? 1. Нужна обработка ошибки открытия ордера3. Нужно назначить горячую клавишу Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 8 июня, 2007 Автор Жалоба Поделиться Опубликовано 8 июня, 2007 1. Нужна обработка ошибки открытия ордера3. Нужно назначить горячую клавишуМне приятно видеть правильные ответы! Ответ на второй вопрос будет такой: сделать для каждой позиции отдельный скрипт И так, наш скрипт будет выглядеть так:MQLint start() { double ЧислоЛотов=1; int Проскальзывание=3; double СтопПотери=0; double ВзятьПрофит=0; int МагическоеЧисло=2222; datetime СрокИстечения=0; string Коментарий = "Как мне это нравится!" ; color ЦветСимвола = GREEN; int Ордер=OrderSend( Symbol(), OP_BUY, ЧислоЛотов, Ask, Проскальзывание, СтопПотери, ВзятьПрофит, Коментарий, МагическоеЧисло, СрокИстечения, ЦветСимвола ); if(Ордер<1) { int error=GetLastError(); Print("Error = " ,error,ErrorDescription(error)); } return(0);}Я выделил назначение переменных впереди для того, чтобы проще было бы разобраться с присвоением значений. Как видете, мы сначала назначили переменным значения, затем открыли ордер и после проверили его открытие. Если же ордер не был открыт (переменной Ордер не было назначено значение ордера - обычно целое число больше нуля), то в журнал записывается причина. Данный файл я назвал "купить1" и назначил ему сочетание CTRL+1. Соответственно для открытия ордера в 0,1 лота я сделал файл "купить01" (клавиши CTRL+0), для ордера в 0,5 лота - "купить05" (клавиши CTRL+5). Точно так же были сделаны скрипты открытия ордеров на продажу. Они отличаются тем, что в качестве команды используется не константа OP_BUY, а константа OP_SELL и вместо цены Ask - цена Bid. Назвал я их соответственно: "продать1" (назначена клавиша ALT+1), "продать01" (клавиша ALT+0), "продать05" (клавиша ALT+5). Вот собственно и всё... Эти скрипты достаточно хорошо помогают при пипсовке - ордера создаются быстро и меньше теряется профита! Ну, а теперь вопрос-задание. А как быть с закрытием ордеров? Предложите оптимальное решение... Ссылка на комментарий Поделиться на другие сайты Поделиться
XCh Опубликовано 8 июня, 2007 Жалоба Поделиться Опубликовано 8 июня, 2007 (изменено) Liv,у меня в строке (Print("Error = " ,error,ErrorDescription(error));) идет ошибка-('ErrorDescription' - variable not defined) -Что это значит? Изменено 8 июня, 2007 пользователем XCh Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 8 июня, 2007 Автор Жалоба Поделиться Опубликовано 8 июня, 2007 Да, действительно...Я взял текст открытия ордера с одного из моих советников. Там используется описание ошибок. Ошибки взяты из справочника. Саму функцию вы можете взять в приложенном архиве. Конечно, можно было бы дать вам задание написать её, тем более, что она очень простая, но как-то назойливо получается с моей стороны... Но желающие могут попробовать сами её написать и сравнить с той, что использую я errordiscriptions.zip Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 10 июня, 2007 Автор Жалоба Поделиться Опубликовано 10 июня, 2007 Мне пришли в ЛС сообщения о том, что скрипты покупки и продажи неверно ставят TakeProfit и StopLoss. И указали, что в функцию передают величину пунктов (pips). Вот только я же нигде не говорил, о том, что там значения будут в пунктах..... Для того, чтобы можно было передать в функцию величину в пунктах, нужно немного изменить наши скрипты, а именно саму команду покупки/продажи. В начале скрипта мы изменяем тип переменных:int СтопПотери=0;int ВзятьПрофит=0; Для покупки:Ask - СтопПотери*Point,Ask+ ВзятьПрофит*Point, Соответственно для продажи:Bid + СтопПотери*Point,Bid - ВзятьПрофит*Point, Теперь можно передавать в функцию значения в пунктах. Как вы уже догадались, Point - это величина пункта текущего инструмента в валюте котировки. Ссылка на комментарий Поделиться на другие сайты Поделиться
Zubr Опубликовано 8 августа, 2007 Жалоба Поделиться Опубликовано 8 августа, 2007 Уважаемый Liv, а не могли бы Вы рассказать о том, как создавать скрипты, которые выводили бы звуковой сигнал по достижении ценой определенного уровня, либо при наступлении определенного времени. Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 8 августа, 2007 Автор Жалоба Поделиться Опубликовано 8 августа, 2007 Для этого скрипт не нужен - в MT4 имеется встроенные функции для этого:закладка "Сигналы" -> правой кнопкой кликнуть на пустом месте (или нажать кнопку Insert), появится окошко.... и там легко разобраться. Ссылка на комментарий Поделиться на другие сайты Поделиться
altimbr Опубликовано 22 августа, 2007 Жалоба Поделиться Опубликовано 22 августа, 2007 Для этого скрипт не нужен - в MT4 имеется встроенные функции для этого:закладка "Сигналы" -> правой кнопкой кликнуть на пустом месте (или нажать кнопку Insert), появится окошко.... и там легко разобраться. Уважаемый LivМожет у меня не тот МТ4, но я не могу настроить сигнал.Пожалуйста, если не утруднит, обьясните подробно. И еще вопрос: для канальной стратегии мне хотелось-бы иметь скрипт выставляющий несколько связанных ордеров. Например на верхней границе канала конструкцию типа: ордер байстоп с переворотом в селллим или во чтото другое, что мне надо. А на нижней границе конструкцию типа: селлстоп и переворот в байлимитед. В общем и целом хорошо бы чтобы все эти типы ордеров, их количество, уровни от которых их выставляют и их уровни стопов и профитов можно было настраивать под свою конкретную стратегию.? Не много ли я прошу? Буду благодарен за ответ. Тимофеич Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 22 августа, 2007 Автор Жалоба Поделиться Опубликовано 22 августа, 2007 Уважаемый LivМожет у меня не тот МТ4, но я не могу настроить сигнал.Пожалуйста, если не утруднит, обьясните подробно.Нажать клавиши 'Ctrl+T' - появится (или исчезнет, если он был - тогда нажать ещё раз) окошко с надписью "Терминал". Там внизу есть несколько закладок:"Торговля", "История счёта", "Новости", "Сигналы" и т.д....Нас интересует закладка "Сигналы" - кликаем на ней левой кнопкой мышки. Открывается список сигналов. Конечно, если им ещё не пользовался, то там ничего нет. Создадим сигнал:кликаем правой кнопкой мышки в любом месте этого окошкаиз появившегося меню выбираем "Создать" - открывается окошко создания сигналовкликаем левой кнопкой мышки на галочке "Разрешить" - галочка должна стоятьиз списка "Действие" выбираем "Sound" (по-аглицки - "Звук")из списка "Сисмвол" выбираем инструмент, на котором работаем, напр. "EURUSD"из списка "Условие" выбираем, например, "Bid>"в поле "Значение" вводим значение инструмента, при превышении цены предложения которого прозвучит сигнализ списка "Источник" вибираем вид звука, который будет звучатьможно установить свой звук, для чего нажать левой кнопкой мышки кнопку с тремя точками справа от списка сигналовможно нажать кнопку "Тест" чтобы послушать как звучит этот сигнал для твоего уханажать кнопку "Ок" для записи и установки сигналаили нажать кнопку "Отмена" для того, чтобы не создавать сигналждём достижение установленного события и балдеем...... Достаточно просто.... и если уж сейчас не получится, то стоит задуматься, а тем ли занимаешься... :ninja: И еще вопрос: для канальной стратегии мне хотелось-бы иметь скрипт выставляющий несколько ......ТимофеичТут я хотел написать "немножко не понял".... но решил написать "совсем не понял"... Ссылка на комментарий Поделиться на другие сайты Поделиться
altimbr Опубликовано 22 августа, 2007 Жалоба Поделиться Опубликовано 22 августа, 2007 Спасибо LIVВСе получилось. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения