Торговые роботы
Преимущества роботизированных маркетинговых систем. Реализация торгового алгоритма на языке программирования MQL 4 и среде разработки MetaTrader 4. Характеристика бренда форекс-индустрии "Альпари". Разработка стратегии без риска для капитала трейдера.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 03.10.2017 |
Размер файла | 1,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://allbest.ru
Введение
Существует много способов вложения свободных средств, при этом каждый способ имеет свои достоинства и недостатки. Тем не менее, миллионы людей в промышленно развитых странах полагают, что наилучшим способом вложения денег является покупка ценных бумаг -- один из способов пустить деньги в оборот, с тем чтобы они дали хорошую отдачу или в форме регулярного дохода от дивидендов, или в форме прибыли в результате возрастания их ценности, или и того, и другого.
В России рынок ценных бумаг не получил еще такого развития и не стал для широких масс чем-то обыденным, как, например, валюта. Кроме того, в настоящее время рынок ценных бумаг во всем мире находится в крайне болезненном состоянии. Крах таких крупных столпов экономики Соединенных Штатов Америки, как Lehman Brothers Lehman Brothers - американский инвестиционный банк, ранее один из ведущих в мире финансовых конгломератов, обанкротился в 2008 году., Goldman Sachs Goldman Sachs - один из крупнейших в мире коммерческих банков, (до 2008 года -- инвестиционный банк). и некоторых других, подрыв доверия к системе бухгалтерского учета США осложняют оценку деятельности компаний при принятии инвестиционного решения и толкают многих инвесторов на отзыв своих средств с фондового рынка и поиск новых источников их вложения. В качестве такого объекта вложения денежных средств может выступать иностранная валюта, ведь падение курса одной из пары валют означает рост другой. Кроме того, практически стопроцентная ликвидность позволит в любой момент закрыть позицию, чего порой невозможно сделать на рынке акций. Доходность рынка FOREX FOREX (Форекс) -- это рынок межбанковского обмена валюты по свободным ценам. превышает процентные ставки по банковским депозитам, что делает этот рынок столь привлекательным для частных инвесторов.
В настоящее время информационные технологии достигли такого уровня развития, что появилась возможность управлять денежными средствами не только со своего персонального компьютера, но даже со смартфонов и планшетов. Появилась возможность не выходя из дома круглосуточно покупать и продавать валюту, совершая сделки в течение нескольких секунд через информационно-торговый терминал MetaTrader4 MetaTrader4 - это торговая платформа, предназначенная для торговли на рынке Форекс, анализа финансовых рынков и использования советников. или любой другой.
Однако, не смотря на постоянное совершенствование технологий, человеческая психология практически не меняется. Одним из залогов успешной торговли на рынке Форекс является наличие хорошей торговой системы и дисциплинированное следование этой системе. Со временем доверие к правильности своих действий растет, и трейдер перестает внимательно относиться к своей работе.
Как правило, в таких случаях прибыльный трейдинг продолжается недолго. Но на сегодняшний день имеется альтернатива ручному трейдингу. В практике рыночной торговли все чаще стали использоваться торговые роботы, которые в совершенстве могут заменять человека как при проведении анализа, так и непосредственно в процессе принятия торговых решений. Автоматический трейдинг получил настолько широкое распространение, что на многих мировых биржах его часть составляет до 40% всех заключенных сделок. При этом доля робототрейдинга непрестанно растет и расширяется. Главное преимущество роботизированных торговых систем -- они не подвержены человеческому фактору.
На сегодняшний день существует большое разнообразие торговых роботов, основанных на самых различных стратегиях. Многие из них можно найти в свободном доступе в сети интернет, или заказать на специально предназначенных для этого сайтах. Существует три вида советников по типу автономности:
· автоматические -- выполняют все функции без какого-либо участия человека, рассчитаны на круглосуточную работу;
· полуавтоматические -- советник дает сигналы трейдеру, когда и каким лотов войти в рынок, уровни ограничения прибыли и убытка, но самостоятельно сделку эксперт не совершает;
· скрипты -- программы, нацеленные на однократное выполнение каких-либо действий.
Естественно, прибыльность торгового робота напрямую зависит от торговой системы, прописанной в программе. Торговые системы могут быть внутридневными и долгосрочными, трендовыми и флетовыми, основанными на показаниях индикаторов или техническом анализе. Для каждой системы существуют обусловленные ее стратегией входы в рынок, ограничения убытков и прибыли, размер лота, используемого в каждой сделке.
В моей работе я поставила цель отобрать торговую систему с достаточно стабильной доходностью и написать на ее основе торгового робота. Своей задачей я вижу разработку такого продукта, который можно было бы в дальнейшем использовать в торговле на финансовых рынках, а так же продавать заинтересованным инвесторам. С течением времени и повышением финансовой грамотности населения данная сфера неустанно набирает популярность как среди профессиональных инвесторов, так и среди неискушенных в этих вопросах людей. Так как сфера торговли на финансовых рынках достаточно нова в нашей стране, а прикладным программированием в данной области занимается достаточно узкий круг лиц, спрос на разработку торговых роботов превышает предложение.
Глава 1. Создание торгового робота
В моей работе я поставила перед собой задачу создать торгового робота на основе торговой системы с оптимальным соотношением параметров риска и прибыли. Торговый робот (советник) -- задача, находящаяся на стыке таких научных областей, как информатика и экономика.
В данном проекте экономическая задача решается с помощью методов информатики. Экономическая составляющая проекта -- это торговая система с оптимально подобранными параметрами, составляющая в сфере информатики -- это непосредственно реализация торгового алгоритма на языке программирования, в данном случае использовался язык MQL4 и среда разработки MetaTrader4.
Рисунок 1: Терминал MetaTrader 4
MQL4 -- это язык программирования Meta Quotes Language 4, встроенный язык программирования индикаторов и торговых стратегий для бесплатного информационно-торгового терминала MetaTrader 4.
Этот терминал предоставляют более сотни брокеров и банков, которые используют торговую платформу MetaTrader 4 для обслуживания своих клиентов. Кроме того, в терминале MetaTrader 4 есть среда разработки MeteEditor 4, в которой чрезвычайно удобно разрабатывать советник.
Рисунок 2: Среда разработки MeteEditor 4
Рисунок 3: Тестер стратегий терминала MetaTrader 4
Для создания программы мне потребовался доступ к терминалу MetaTrader 4. Для этого необходимо было скачать терминал с сайта брокера, предоставляющего возможность торговли на рынке ФОРЕКС и открыть демонстрационный счет в компании, для доступа к возможности заключать сделки. Мой выбор пал на компанию «Альпари». Компания «Альпари» была основана в 1998 году и на сегодняшний день является одним из крупнейших брендов в мировой форекс-индустрии.
Для открытия демонстрационного счета мне потребовалось зарегистрировать личный кабинет на сайте www.alpari.ru. Основное отличие демонстрационного счета от реального состоит в том, что демо-счет не нужно пополнять реальными деньгами, он необходим как для отработки торговой стратегии, так и для тестирования торгового робота без риска для капитала трейдера. алгоритм роботизированный программирование
Глава 2. Разработка алгоритма
На сегодняшний день в различной литературе и интернет-ресурсах для трейдеров существует огромное количество самых разнообразных торговых систем.
Каждый трейдер может выбрать оптимальную для себя систему, основываясь на индивидуальных особенностях своего рабочего графика и взглядов на рыночную торговлю. Для своего проекта я отбирала систему по следующим параметрам:
· четкие и однозначные критерии входа в рынок;
· ограниченное количество сделок в день;
· разумный мани-менеджмент;
· оптимальное соотношение прибыль/убыток.
Мой выбор пал на систему, основанную на числах Фибоначчи. Ключевой элемент данной торговой системы -- линии поддержки/сопротивления, основанные на уровнях Фибоначчи, с помощью которых можно проводить анализ и прогнозировать динамику различных финансовых инструментов.
Наиболее значимые уровни Фибоначчи на рынке форекс:
0,0; 11,0; 23,6; 38,2; 50,0; 61,8; 76,4; 89,0; 100,0; 138,2; 161,8; 211,0; 261,8; 311,0; 361,8; 423,6; 510,8; 598,0; 685,4; 1109;4.
Для того, чтобы поместить уровни Фибоначчи на график необходимо выбрать две точки: максимум и минимум, между которыми будут натянуты уровни.
В моей системе этими точками являются максимум и минимум за азиатскую торговую сессию, а именно промежуток времени с 23:30 до 7:30.
Рисунок 4: Уровни Фибоначчи
Рисунок 5: Уровни Фибоначчи на азиатской торговой сессии
Будут ли открыты сделки -- зависит от наличия и направления тренда. Существует много способов определения тренда, я остановилась на сравнении максимумов и минимумов дневных свечей.
Если максимум вчерашней свечи больше максимума позавчерашней, и минимум вчерашней больше минимума позавчерашней -- тренд восходящий.
Если максимум вчерашней свечи меньше максимума позавчерашней, и минимум вчерашней меньше минимума позавчерашней -- тренд нисходящий.
Если оба критерия неверны -- советник сделок не заключает.
Рисунок 6: Восходящий тренд
Рисунок 7: Нисходящий тренд
Рисунок 8: Флэт
Если советник определил наличие тренда, то выставляются отложенные ордера в выбранном направлении. По системе выставляются четыре ордера: один BuyStop (SellStop) и три BuyLimit (SellLimit). Ордера выставляются на уровнях: 0,0 и 100,0 для BuyStop и SellStop соответственно, -161,8, -211,0, -261,0 для BuyLimit и 161,8, 211,0, 261,0 SellLimit соответственно. Если в течении дня ордера не откроются, они будут удалены по экспирации в 21:59 того же дня.
Для каждого ордера предусмотрен свой стоп-лосс, то есть уровень ограничения потерь. В данной системе уровни стоп-лосс тоже привязаны к уровням Фибоначчи, и составляют: -138,2 для BuyStop, 138,2 для SellStop, -685,4 для BuyLimit, 685,4 для SellLimit.
Сумма (лот), на которую открывается сделка, зависит от количества средств, которыми располагает трейдер. Так как я использовала демо-счет на 10000$, я выставила следующие лоты: 1.0 для BuyStop и SellStop, 0.5 для BuyLimit1 и SellLimit1, 0.3 для BuyLimit2 и SellLimit2, 0.2 для BuyLimit3 и SellLimit3. Лоты в программе можно настраивать вручную, как и многие другие параметры.
Рисунок 9: Советник в работе, выставлены отложенные ордера на покупку
Так как система, описанная выше, трендовая, следовательно чем дольше открыты сделки, тем больше прибыли получит трейдер. Таким образом, если отказаться от фиксированных уровней тейк-профит, прибыль к каждой сделки увеличится в разы.
Однако, с течением времени из-за зафиксированных убыточных сделок депозит начинает сокращаться, так как убыточные сделки закрываются по стоп-лоссу, а прибыльные остаются открытыми.
Чтобы ограничить проседание депозита, но в тоже время максимально сохранить прибыль, я решила фиксировать часть прибыльных сделок после того, как депозит пересечет определенную отметку проседания. Такой подход позволяет как защитить средства инвестора, так и максимально приумножить прибыль.
Глава 3. Информационно-программная система
3.1 Основной код программы
//--------------------------------------------------------------------------------
//| A_FIBO1.mq4 |
//| Polina 2014 |
//| http://www.mql5.com |
//--------------------------------------------------------------------------------
#property copyright "Polina 2014"
#property link "http://www.mql5.com"
#property version "1.00"
---ВКЛЮЧАЕМЫЕ_ФАЙЛЫ---------------------------------------------------
#include <stdlib.mqh>
#include <StdLibErr.mqh>
#include <stderror.mqh>
#include <WinUser32.mqh> //стндартные включаемые библиотеки
#include <Trend.mqh> //определение тренда
#include <Parols.mqh> //проверка паролей
#include <FiboCreate.mqh> //создание уровней Фибоначчи
#include <VLineCreate.mqh> //создание линий таймсерий
#include <FiboVLineDelete.mqh> //удаление уровней Фибоначчи и линий таймсерий
#include <ZapisVcsv.mqh> //запись данных в ***.csv файл
#include <Lots.mqh> //рассчет лотов
#include <OpenOrders.mqh> //выставление отложенных ордеров
#include <Trall.mqh> //трейлинг-стоп ордеров
#include <Errors.mqh> //обработка ошибок
//---ГЛОБАЛЬНЫЕ_ПЕРЕМЕННЫЕ-----------------------------------------
//разрешения на работу функций
extern bool Work =true; //Wort - разрешение на заключение сделок
extern bool WorkPlus =true; //WorkPlus - разрешение на заключение сделок на покупку
extern bool WorkMinus=true; //WorkMinus - разрешение на заключение сделок на продажу
extern bool WorkBL =true; //WorkBL - разрешение на выставление лимитных ордеров BuyLimit
extern bool WorkSL =true; //WorkSL - разрешение на выставление лимитных ордеров SellLimit
extern bool WorkStop =true; //WorkStop - разрешение на выставление ордеров BuyStop и SellStop
extern bool WorkTrend=true; //WorkTrend - разрешЕние на включение автоматической трендовой сортировки условий входа
extern bool WorkPerc =false; //WorkPerc - разрешение на автоматический рассчет ордеров
//extern bool WorkLot =false; //WorkLot - разрешение на пропорциональный капиталу рассчет лотов (usd)
extern bool Zapis =true; //Zapis - разрешение на запись в ***.csv файл
extern double RasstWorkNo=1000 ; //RasstWorkNo - ширина флета в пунктах, после которой сделки не заключаются
extern double RasstWorkAll=150; //RasstWorkAll - ширина флета в пунктах, после которой сделки заключаются и на покупку, и на продажу
extern double TrallStop=800 ; //TrallStop - размер трейлинг-стопа стоплоссов
extern double Pointer=0.001 ; //Pointer - отступ от уровней Фибоначчи 0.0 и 100.0 для выставления отложенных ордеров (0.00001 - 1 пункт)
extern string timeend ="07:30"; //Timeend - время завершения флета
//лоты, заданные в лотах
extern double Lot =0.1; //Lot - лот для BuyStop и SellStop
extern double Lot21=0.05; //Lot21 - лот для BuyLimit1
extern double Lot22=0.03; //Lot22 - лот для BuyLimit2
extern double Lot23=0.02; //Lot23 - лот для BuyLimit3
extern double Lot31=0.05; //Lot31 - лот для SellLimit1
extern double Lot32=0.03; //Lot32 - лот для SellLimit2
extern double Lot33=0.02; //Lot33 - лот для SellLimit3
//параметры MA
extern int TimeframeMA=PERIOD_D1; //TimeframeMA - таймфрейм индикатора МА
extern int PeriodMA =6; //PeriodMA - период усреднения для вычисления индикатора МА
extern int SdvigSr =3; //SdvigSr - сдвиг индикатора МА относительно ценового графика
extern int MethodMA =MODE_EMA; //MethodMA - метод усреднения МА
extern int PriceMA =PRICE_CLOSE; //PriceMA - используемая индикатором МА цена
extern int Sdvg =1; //Sdvg - индекс получаемого значения из индикаторного буфера
//глобальные переменные для параматра "Ticket"
extern int Ticket221=0; //Ticket221 - тикет для BuyLimit1
extern int Ticket222=0; //Ticket222 - тикет для BuyLimit2
extern int Ticket223=0; //Ticket223 - тикет для BuyLimit3
extern int Ticket331=0; //Ticket331 - тикет для SellLimit1
extern int Ticket332=0; //Ticket332 - тикет для SellLimit2
extern int Ticket333=0; //Ticket333 - тикет для SellLimit3
extern int Ticket44 =0; //Ticket44 - тикет для BuyStop
extern int Ticket55 =0; //Ticket55 - тикет для SellStop
int OnInit()
{
Errors(); //функция обработки ошибок
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
//---ПЕРЕМЕННЫЕ--------------------------------------------------------
//---переменные_рабочих_таймсерий------------------------------------
bool DoNothing=false; //период с 23:30 до 07:30
bool DoAll =false; //период с 07:31 до 22:00
bool DeletAll =false; //период с 22:01 до 23:29
datetime datatime =TimeCurrent();
datetime datatime1=datatime-86400;
string time_1="23:30"; //начало флета
string time_2="07:30"; //конец флета
string time_3="07:31"; //начало рабочей таймсерии
string time_4="22:00"; //конец рабочей таймсерии
string time_5="22:01"; //начало периода ожидания
string time_6="23:29"; //конец периода ожидания
datetime Time_1=StrToTime(TimeToStr(datatime1, TIME_DATE)+" "+time_1);
datetime Time_2=StrToTime(TimeToStr(datatime , TIME_DATE)+" "+time_2);
datetime Time_3=StrToTime(TimeToStr(datatime , TIME_DATE)+" "+time_3);
datetime Time_4=StrToTime(TimeToStr(datatime , TIME_DATE)+" "+time_4);
datetime Time_5=StrToTime(TimeToStr(datatime , TIME_DATE)+" "+time_5);
datetime Time_6=StrToTime(TimeToStr(datatime , TIME_DATE)+" "+time_6);
//---переменные_графических_объектов-------------------------------------
long chart_ID =0; //окно графика
color clrfibo[] ={Red, DodgerBlue}; //цвет уровней Фибоначчи
color clrline =clrRed; //цвет линий таймсерий
int stylefibo[]={2, 0}; //стиль уровней Фибоначчи
int styleline =2; //стиль линий таймсерий
int widthfibo[]={1, 1}; //ширина уровней Фибоначчи
int widthline =1; //ширина линий таймсерий
double fibolevel[]={-10.094, -5.854, -4.98, -4.108, -3.236, -2.618, -2.11, -1.618, -1.11, -0.618, -0.382,
0.0, 0.11, 0.236, 0.382, 0.5, 0.618, 0.764, 0.89, 1.0,
1.382, 1.618, 2.11, 2.618, 3.11, 3.618, 4.236, 5.108, 5.98, 6.854, 11.094};
string namelevel[]={"1109.4", "685.4", "598.0", "510.8", "423.6", "361.8", "311.0", "261.8", "211.0", "161.8", "138.2",
"0.0/100.0", "11.0/89.0", "23.6/76.4", "38.2/61.8", "50.0", "61.8/38.2", "76.4/23.6", "89.0/11.0", "100.0/0.0",
"138.2", "161.8", "211.0", "261.8", "311.0", "361.8", "423.6", "510.8", "598.0", "685.4", "1109.4"};
string timebegin="23:30";
//string timeend="07:30";
string timeend2 ="22:00";
string exptime ="21:59"; //время истечения срока неоткрытых ордеров
datetime timefibo1=StrToTime(TimeToStr(datatime1, TIME_DATE)+" "+timebegin);
datetime timefibo2=StrToTime(TimeToStr(datatime , TIME_DATE)+" "+timeend);
datetime timeline1=StrToTime(TimeToStr(datatime1, TIME_DATE)+" "+timebegin);
datetime timeline2=StrToTime(TimeToStr(datatime , TIME_DATE)+" "+timeend);
datetime timeline3=StrToTime(TimeToStr(datatime , TIME_DATE)+" "+timeend2);
int bar1=iBarShift(NULL, 0, timefibo1);
int bar2=iBarShift(NULL, 0, timefibo2);
double pricefibo1=High[iHighest(NULL, 0, MODE_HIGH, bar1-bar2, bar2)];
double pricefibo2=Low [iLowest (NULL, 0, MODE_LOW , bar1-bar2, bar2)];
string namefibo ="Fibo";
string nameline1="VLine1";
string nameline2="VLine2";
string nameline3="VLine3";
//---ТАЙМСЕРИИ------------------------------------------------------------
if(datatime>=Time_1 && datatime<=Time_2) DoNothing=true;
//период с 23:30 до 07:30, ничего не происходит
if(datatime>=Time_3 && datatime<=Time_4) DoAll=true;
/*период с 07:31 до 22:00, рассчитываются и создаются уровни Фибоначчи,
линии таймсерий, выставляются отложеннве ордера (несработавшие удаляются по экспирации в 21:59)*/
if(datatime>=Time_5 && datatime<=Time_6) DeletAll=true;
//период с 22:01 до 23:29, удаляются уровни Фибоначчи и линии таймсерий, обнуляются логические переменные
//---DoNothing-------------------------------------------------------------
if(DoNothing==true) Sleep(600);
//---DoAll----------------------------------------------------------------------
if(DoAll==true)
{
Parols(); //функция осуществляет проверку паролей
FiboCreate(clrfibo, stylefibo, widthfibo, fibolevel, namelevel, namefibo, timefibo1, pricefibo1, timefibo2, pricefibo2);
//функция создает уровни Фибоначчи на графике
VLineCreate(nameline1, nameline2, nameline3, timeline1, timeline2, timeline3, clrline, styleline, widthline);
//функция создает линии таймсерий на графике
//---рассчет_цены_для_каждого_уровня_Фибоначчи-------------------
double Price_11=ObjectGet(namefibo,OBJPROP_PRICE2); //0.0
double Price_19=ObjectGet(namefibo,OBJPROP_PRICE1); //100.0
double Price_0 =NormalizeDouble(((Price_19-(Price_19-Price_11)*fibolevel[30])),5); //-1109.4
double Price_1 =NormalizeDouble(((Price_19-(Price_19-Price_11)*fibolevel[29])),5); //-685.4
double Price_2 =NormalizeDouble(((Price_19-(Price_19-Price_11)*fibolevel[28])),5); //-598.0
double Price_3 =NormalizeDouble(((Price_19-(Price_19-Price_11)*fibolevel[27])),5); //-510.8
double Price_4 =NormalizeDouble(((Price_19-(Price_19-Price_11)*fibolevel[26])),5); //-423.6
double Price_5 =NormalizeDouble(((Price_19-(Price_19-Price_11)*fibolevel[25])),5); //-361.8
double Price_6 =NormalizeDouble(((Price_19-(Price_19-Price_11)*fibolevel[24])),5); //-311.0
double Price_7 =NormalizeDouble(((Price_19-(Price_19-Price_11)*fibolevel[23])),5); //-261.8
double Price_8 =NormalizeDouble(((Price_19-(Price_19-Price_11)*fibolevel[22])),5); //-211.0
double Price_9 =NormalizeDouble(((Price_19-(Price_19-Price_11)*fibolevel[21])),5); //-161.8
double Price_10=NormalizeDouble(((Price_19-(Price_19-Price_11)*fibolevel[20])),5); //-138.2
double Price_12=NormalizeDouble(((Price_19-Price_11)*fibolevel[12]+Price_11),5); //11.0/89.0
double Price_13=NormalizeDouble(((Price_19-Price_11)*fibolevel[13]+Price_11),5); //23.6/76.4
double Price_14=NormalizeDouble(((Price_19-Price_11)*fibolevel[14]+Price_11),5); //38.2/61.8
double Price_15=NormalizeDouble(((Price_19-Price_11)*fibolevel[15]+Price_11),5); //50.0
double Price_16=NormalizeDouble(((Price_19-Price_11)*fibolevel[16]+Price_11),5); //61.8/38.2
double Price_17=NormalizeDouble(((Price_19-Price_11)*fibolevel[17]+Price_11),5); //76.4/23.6
double Price_18=NormalizeDouble(((Price_19-Price_11)*fibolevel[18]+Price_11),5); //89.0/11.0
double Price_20=NormalizeDouble(((Price_19-Price_11)*fibolevel[20]+Price_11),5); //138.2
double Price_21=NormalizeDouble(((Price_19-Price_11)*fibolevel[21]+Price_11),5); //161.8
double Price_22=NormalizeDouble(((Price_19-Price_11)*fibolevel[22]+Price_11),5); //211.0
double Price_23=NormalizeDouble(((Price_19-Price_11)*fibolevel[23]+Price_11),5); //261.8
double Price_24=NormalizeDouble(((Price_19-Price_11)*fibolevel[24]+Price_11),5); //311.0
double Price_25=NormalizeDouble(((Price_19-Price_11)*fibolevel[25]+Price_11),5); //361.8
double Price_26=NormalizeDouble(((Price_19-Price_11)*fibolevel[26]+Price_11),5); //423.6
double Price_27=NormalizeDouble(((Price_19-Price_11)*fibolevel[27]+Price_11),5); //510.8
double Price_28=NormalizeDouble(((Price_19-Price_11)*fibolevel[28]+Price_11),5); //598.0
double Price_29=NormalizeDouble(((Price_19-Price_11)*fibolevel[29]+Price_11),5); //685.4
double Price_30=NormalizeDouble(((Price_19-Price_11)*fibolevel[30]+Price_11),5); //1109.4
//---рассчет_параметров_ордеров-------------------------------------------
//0 - Buy
//1 - Sell
//2 - BuyLimit (Ticket221, Ticket222, Ticket223)
//3 - SellLimit (Ticket331, Ticket332, Ticket333)
//4 - BuyStop (Ticket44)
//5 - SellStop (Ticket55)
double Price21=NormalizeDouble(Price_9 , Digits); //цена открытия BuyLimit1
double Price22=NormalizeDouble(Price_8 , Digits); //цена открытия BuyLimit2
double Price23=NormalizeDouble(Price_7 , Digits); //цена открытия BuyLimit3
double Price31=NormalizeDouble(Price_21, Digits); //цена открытия SellLimit1
double Price32=NormalizeDouble(Price_22, Digits); //цена открытия SellLimit2
double Price33=NormalizeDouble(Price_23, Digits); //цена открытия SellLimit3
double Price4 =NormalizeDouble((Price_19+Pointer), Digits); //цена открытия BuyStop
double Price5 =NormalizeDouble((Price_11-Pointer), Digits); //цена открытия SellStop
double StopLoss21=NormalizeDouble(Price_1 , Digits); //стоп-лосс BuyLimit1
double StopLoss22=NormalizeDouble(Price_1 , Digits); //стоп-лосс BuyLimit2
double StopLoss23=NormalizeDouble(Price_1 , Digits); //стоп-лосс BuyLimit3
double StopLoss31=NormalizeDouble(Price_29, Digits); //стоп-лосс SellLimit1
double StopLoss32=NormalizeDouble(Price_29, Digits); //стоп-лосс SellLimit2
double StopLoss33=NormalizeDouble(Price_29, Digits); //стоп-лосс SellLimit3
double StopLoss4 =NormalizeDouble(Price_10, Digits); //стоп-лосс BuyStop
double StopLoss5 =NormalizeDouble(Price_20, Digits); //стоп-лосс SellStop
double TakeProfit21=NormalizeDouble(Price_30, Digits); //тейк-профит BuyLimit1
double TakeProfit22=NormalizeDouble(Price_30, Digits); //тейк-профит BuyLimit2
double TakeProfit23=NormalizeDouble(Price_30, Digits); //тейк-профит BuyLimit3
double TakeProfit31=NormalizeDouble(Price_0 , Digits); //тейк-профит SellLimit1
double TakeProfit32=NormalizeDouble(Price_0 , Digits); //тейк-профит SellLimit2
double TakeProfit33=NormalizeDouble(Price_0 , Digits); //тейк-профит SellLimit3
double TakeProfit4 =NormalizeDouble(Price_30, Digits); //тейк-профит BuyStop
double TakeProfit5 =NormalizeDouble(Price_0 , Digits); //тейк-профит SellStop
datetime Expiration=StrToTime(TimeToStr(datatime, TIME_DATE)+" "+exptime); //удаление несработавших ордеров в 21:59
Trend(Price_19, Price_11); //функция определяет тренд
Lots(); //функция автоматического рассчета лотов в процентах
OpenOrders(Price_11, Price_19,
Price21, Price22, Price23, Price31, Price32, Price33, Price4, Price5,
StopLoss21, StopLoss22, StopLoss23, StopLoss31, StopLoss32, StopLoss33, StopLoss4, StopLoss5,
TakeProfit21, TakeProfit22, TakeProfit23, TakeProfit31, TakeProfit32, TakeProfit33, TakeProfit4, TakeProfit5,
Expiration);
//функция выставления ордеров
Trall(); //функция трейлинг-стопа стоп-лоссов
ZapisVcsv(datatime, Price_19, Price_11); //функция записи данных в файл ***.csv
Errors(); //функция обработки ошибок
}
//---DeletAll-------------------------------------------------------------------
if(DeletAll==true)
{
FiboVLineDelete(chart_ID, namefibo, nameline1, nameline2, nameline3); //функция удаления уровней Фибоначчи и линий таймсерий
Errors(); //функция обработки ошибок
Ticket221=0;
Ticket222=0;
Ticket223=0;
Ticket331=0;
Ticket332=0;
Ticket333=0;
Ticket44 =0;
Ticket55 =0;
Work =true;
Zapis=true;
}
}
3.2Функция определения тренда
void Trend(double Price_19, double Price_11)
{
//---High-Low дня----------------------------------------------------+
double Highprice1=iHigh(NULL, PERIOD_D1, 1);
double Lowprice1 =iLow (NULL, PERIOD_D1, 1);
double Highprice2=iHigh(NULL, PERIOD_D1, 2);
double Lowprice2 =iLow (NULL, PERIOD_D1, 2);
if(WorkTrend==true)
{
if(Lowprice1>Lowprice2 && Highprice1>Highprice2)
{
WorkPlus =true;
WorkMinus=false;
}
if(Lowprice1<Lowprice2 && Highprice1<Highprice2)
{
WorkPlus =false;
WorkMinus=true;
}
if((Highprice1>=Highprice2 && Lowprice1<=Lowprice2) ||
(Highprice1<=Highprice2 && Lowprice1>=Lowprice2))
{
WorkPlus =false;
WorkMinus=false;
}
}
}
3.3 Функция проверки паролей
void Parols()
{
//проверить демо счет
if(IsDemo()==false)
{
printf("Это реальный счет! Торговля запрещена!");
PlaySound("Error.wav");
Work=false;
}
//проверить компанию
if (AccountCompany()!="Alpari Limited")
{
printf("Счет не принадлежит компании Альпари! Торговля запрещена!");
PlaySound("Error.wav");
Work=false;
}
//проверить номер счета
if(AccountNumber()!=7199383)
{
printf("Неправильный счет: "+(string)AccountNumber()+"! Торговля запрещена!");
PlaySound("Error.wav");
Work=false;
}
//проверить, на кого зарегистрирован счет
if(AccountName()!="Andreeva Polina")
{
printf("Счет зарегистрирован на постороннего пользователя: "+(string)AccountName()+"! торговля запрещена!");
PlaySound("Error.wav");
Work=false;
}
//проверить время истечения пробной версии
if(TimeCurrent()>StrToTime("2020.01.01 00:00:00"))
{
printf("Время пользования демо-версией программы истекло! Торговля запрещена!");
PlaySound("Error.wav");
Work=false;
}
}
3.4 Функция создания уровней Фибоначчи
void FiboCreate(color& clrfibo[], int& stylefibo[], int& widthfibo[],
double& fibolevel[], string& namelevel[], string namefibo,
datetime timefibo1, double pricefibo1, datetime timefibo2, double pricefibo2,
bool ry=False, long chart_ID=0, int sub_window=0, bool back=false,
bool selection=false, bool ray_left=false, bool ray_right=false,
bool hidden=false, long z_order=0)
{
int i, k=ArraySize(fibolevel);
if(ObjectFind(namefibo)<0) ObjectCreate(0, namefibo, OBJ_FIBO, 0, 0.0, 0.0);
ObjectSet(namefibo, OBJPROP_TIME1 ,timefibo1); //первая координата времени
ObjectSet(namefibo, OBJPROP_PRICE1 ,pricefibo1); //первая координата цены
ObjectSet(namefibo, OBJPROP_TIME2 ,timefibo2); //вторая координата времени
ObjectSet(namefibo, OBJPROP_PRICE2 ,pricefibo2); //вторая координата цены
ObjectSet(namefibo, OBJPROP_COLOR ,clrfibo[0]); //цвет объекта
ObjectSet(namefibo, OBJPROP_RAY ,ry); //флаг свойства луч
ObjectSet(namefibo, OBJPROP_STYLE ,stylefibo[0]); //стиль линии объекта
ObjectSet(namefibo, OBJPROP_WIDTH ,widthfibo[0]); //ширина линии объекта
ObjectSet(namefibo, OBJPROP_LEVELCOLOR ,clrfibo[1]); //цвет линии уровня объекта
ObjectSet(namefibo, OBJPROP_LEVELSTYLE ,stylefibo[1]); //стиль линии уровня объекта
ObjectSet(namefibo, OBJPROP_LEVELWIDTH ,widthfibo[1]); //ширина линии уровня объекта
ObjectSet(namefibo, OBJPROP_BACK ,back); //объект на заднем плане
ObjectSet(namefibo, OBJPROP_SELECTED ,selection); //выделенность объекта
ObjectSet(namefibo, OBJPROP_RAY_LEFT ,ray_left); //луч продолжается влево
ObjectSet(namefibo, OBJPROP_RAY_RIGHT ,ray_right); //луч продолжается вправо
ObjectSet(namefibo, OBJPROP_HIDDEN ,hidden); //запрет на показ имени графического объекта в списке объектов из меню терминала
ObjectSet(namefibo, OBJPROP_ZORDER ,z_order); //приоритет графического объекта на получение события нажатия мышки на графике
if(k>0)
{
ObjectSetInteger(chart_ID, namefibo, OBJPROP_FIBOLEVELS, k);
for (i=0; i<k; i++)
{
ObjectSetDouble(chart_ID, namefibo, OBJPROP_FIRSTLEVEL+i, fibolevel[i]);
ObjectSetFiboDescription(namefibo, i, StringSubstr(namelevel[i], 0)+" (%$)");
}
}
}
3.5 Функция создания линий таймсерий
void VLineCreate(string nameline1, string nameline2, string nameline3,
datetime timeline1, datetime timeline2, datetime timeline3,
color clrline, int styleline, int widthline,
long chart_ID=0, int sub_window=0, bool back=false, bool selection=false,
bool ray=false, bool hidden=false, long z_order=0)
{
if(ObjectFind(nameline1)<0)ObjectCreate(0, nameline1, OBJ_VLINE, 0, 0, 0);
ObjectSetInteger(chart_ID, nameline1, OBJPROP_TIME ,timeline1); //координата времени
ObjectSetInteger(chart_ID, nameline1, OBJPROP_COLOR ,clrline); //цвет объекта
ObjectSetInteger(chart_ID, nameline1, OBJPROP_STYLE ,styleline); //стиь объекта
ObjectSetInteger(chart_ID, nameline1, OBJPROP_WIDTH ,widthline); //ширина линии объекта
ObjectSetInteger(chart_ID, nameline1, OBJPROP_BACK ,back); //объект на заднем плане
ObjectSetInteger(chart_ID, nameline1, OBJPROP_SELECTABLE ,selection); //доступность объекта
ObjectSetInteger(chart_ID, nameline1, OBJPROP_RAY ,ray); //флаг свойства луч
ObjectSetInteger(chart_ID, nameline1, OBJPROP_HIDDEN ,hidden); //запрет на показ имени графического объекта в списке объектов из меню терминала
ObjectSetInteger(chart_ID, nameline1, OBJPROP_ZORDER ,z_order); //приоритет графического объекта на получение события нажатия мышки на графике
if(ObjectFind(nameline2)<0)ObjectCreate(0, nameline2, OBJ_VLINE, 0, 0, 0);
ObjectSetInteger(chart_ID, nameline2, OBJPROP_TIME ,timeline2);
ObjectSetInteger(chart_ID, nameline2, OBJPROP_COLOR ,clrline);
ObjectSetInteger(chart_ID, nameline2, OBJPROP_STYLE ,styleline);
ObjectSetInteger(chart_ID, nameline2, OBJPROP_WIDTH ,widthline);
ObjectSetInteger(chart_ID, nameline2, OBJPROP_BACK ,back);
ObjectSetInteger(chart_ID, nameline2, OBJPROP_SELECTABLE ,selection);
ObjectSetInteger(chart_ID, nameline2, OBJPROP_RAY ,ray);
ObjectSetInteger(chart_ID, nameline2, OBJPROP_HIDDEN ,hidden);
ObjectSetInteger(chart_ID, nameline2, OBJPROP_ZORDER ,z_order);
if(ObjectFind(nameline3)<0)ObjectCreate(0, nameline3, OBJ_VLINE, 0, 0, 0);
ObjectSetInteger(chart_ID, nameline3, OBJPROP_TIME ,timeline3);
ObjectSetInteger(chart_ID, nameline3, OBJPROP_COLOR ,clrline);
ObjectSetInteger(chart_ID, nameline3, OBJPROP_STYLE ,styleline);
ObjectSetInteger(chart_ID, nameline3, OBJPROP_WIDTH ,widthline);
ObjectSetInteger(chart_ID, nameline3, OBJPROP_BACK ,back);
ObjectSetInteger(chart_ID, nameline3, OBJPROP_SELECTABLE ,selection);
ObjectSetInteger(chart_ID, nameline3, OBJPROP_RAY ,ray);
ObjectSetInteger(chart_ID, nameline3, OBJPROP_HIDDEN ,hidden);
ObjectSetInteger(chart_ID, nameline3, OBJPROP_ZORDER ,z_order);
}
3.6 Функция удаления уровней Фибоначчи и линий таймсерий
void FiboVLineDelete(long chart_ID, string namefibo, string nameline1, string nameline2, string nameline3)
{
if(ObjectFind(namefibo) >0) ObjectDelete(0,namefibo) ;
if(ObjectFind(nameline1)>0) ObjectDelete(0,nameline1);
if(ObjectFind(nameline2)>0) ObjectDelete(0,nameline2);
if(ObjectFind(nameline3)>0) ObjectDelete(0,nameline3);
}
3.7 Функция записи данных в ***.csv файл
void ZapisVcsv(datetime datatime, double Price_19, double Price_11)
{
if(Zapis==true) //запись данных в таблицу ("Statistica.csv"), происходит один раз в день
{
double Highprice1=iHigh(NULL, PERIOD_D1, 1);
double Lowprice1 =iLow (NULL, PERIOD_D1, 1);
double Rasst =NormalizeDouble(((Price_19-Price_11) *100000),2);
double Rasst2=NormalizeDouble(((Highprice1-Lowprice1)*100000),2);
double IMA=iMA(NULL, TimeframeMA, PeriodMA, SdvigSr, MethodMA, PriceMA, Sdvg);
double Closeprice1=iClose(NULL, PERIOD_D1, 1);
string Litera;
if(IMA<Closeprice1) Litera="A";
if(IMA>Closeprice1) Litera="B";
if(IMA==Closeprice1) Litera="C";
int handle=FileOpen("Statistica.csv", FILE_READ|FILE_WRITE, ";");
FileSeek(handle, 0, SEEK_END);
FileWrite(handle, datatime, Price_19, Price_11, Rasst, Highprice1, Lowprice1, Rasst2, Litera); //список передаваемых параметров
FileClose(handle);
Zapis=false;
}
}
3.8 Функция проверки лотов
void Lots()
{
double One_Lot=MarketInfo(NULL, MODE_MARGINREQUIRED); //стоимость 1 лота
double Step =MarketInfo(NULL, MODE_LOTSTEP); //шаг изменения размера
double Free =AccountFreeMargin(); //свободные средства
if(Lot>0 || Lot21>0 || Lot22>0 || Lot23>0 || Lot31>0 || Lot32>0 || Lot33>0)
{
double Money=Lot*One_Lot;
double MoneyBL=(Lot21+Lot22+Lot23)*One_Lot;
if((Money+MoneyBL)>Free)
{
double NoFree=(Money+MoneyBL)-Free;
printf("Недостаточно средств для торговли! Необходимо добавить: "+(string)NoFree+".");
}
}
}
3.9 Функция выставления отложенных ордеров
void OpenOrders(double Price_11, double Price_19,
double Price21, double Price22, double Price23, double Price31, double Price32, double Price33, double Price4, double Price5,
double StopLoss21, double StopLoss22, double StopLoss23, double StopLoss31, double StopLoss32, double StopLoss33, double StopLoss4, double StopLoss5,
double TakeProfit21, double TakeProfit22, double TakeProfit23, double TakeProfit31, double TakeProfit32, double TakeProfit33, double TakeProfit4, double TakeProfit5, datetime Expiration)
{
int spread=3;//MarketInfo(Symbol(),MODE_SPREAD);
double Rasst=NormalizeDouble((Price_19-Price_11)*100000,Digits); //ширина Уровней Фибоначчи в новых пунктах
if(Rasst>RasstWorkNo)
{
printf("Расстояние между уровнями Фибоначчи составляет "+(string)Rasst+" пунктов. Эксперт сегодня торговать не будет.");
Work=false;
}
if(Rasst<RasstWorkAll)
{
WorkPlus =true;
WorkMinus=true;
}
if(Ticket221!=0 && Ticket222!=0 && Ticket223!=0 && Ticket331!=0 && Ticket332!=0 && Ticket333!=0 && Ticket44!=0 && Ticket55!=0)
{
Work=false; //если сегодня ордера уже выставлены, новые не выставляются (учитываются только сегодняшние ордера)
}
for(int i=0; i<=OrdersTotal(); i++)
{
if(OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES)==true)
{
int Tip=OrderType();
if(Tip>1) Work=false;
}
}
if(Work==true) //если ордера не выставлены
{
if(Ticket221==0 && WorkPlus==true && WorkBL==true) //условия выставления отложенного ордера на покупку BuyLimit1
{
int Ticket21=OrderSend(Symbol(), OP_BUYLIMIT, Lot21, Price21, spread, StopLoss21, TakeProfit21, NULL, 115201615, Expiration, clrOrange);
if(Ticket21>0)
{
Ticket221=Ticket21;
printf("Выставлен ордер отложенный ордер на покупку BuyLimit №"+(string)Ticket21);
PlaySound("Ok.wav");
}
}
if(Ticket222==0 && WorkPlus==true && WorkBL==true) //условия выставления отложенного ордера на покупку BuyLimit2
{
int Ticket22=OrderSend(Symbol(), OP_BUYLIMIT, Lot22, Price22, spread, StopLoss22, TakeProfit22, NULL, 115201615, Expiration, clrOrange);
if(Ticket22>0)
{
Ticket222=Ticket22;
printf("Выставлен ордер отложенный ордер на покупку BuyLimit №"+(string)Ticket22);
PlaySound("Ok.wav");
}
}
if(Ticket223==0 && WorkPlus==true && WorkBL==true) //условия выставления отложенного ордера на покупку BuyLimit3
{
int Ticket23=OrderSend(Symbol(), OP_BUYLIMIT, Lot23, Price23, spread, StopLoss23, TakeProfit23, NULL, 115201615, Expiration, clrOrange);
if(Ticket23>0)
{
Ticket223=Ticket23;
printf("Выставлен ордер отложенный ордер на покупку BuyLimit №"+(string)Ticket23);
PlaySound("Ok.wav");
}
}
if(Ticket331==0 && WorkMinus==true && WorkSL==true) //условия выставления отложенного ордера на продажу SellLimit1
{
int Ticket31=OrderSend(Symbol(), OP_SELLLIMIT, Lot31, Price31, spread, StopLoss31, TakeProfit31, NULL, 115201615, Expiration, clrDeepSkyBlue);
if(Ticket31>0)
{
Ticket331=Ticket31;
printf("Выставлен отложенный ордер на продажу SellLimit №"+(string)Ticket31);
PlaySound("Ok.wav");
}
}
if(Ticket332==0 && WorkMinus==true && WorkSL==true) //условия выставления отложенного ордера на продажу SellLimit2
{
int Ticket32=OrderSend(Symbol(), OP_SELLLIMIT, Lot32, Price32, spread, StopLoss32, TakeProfit32, NULL, 115201615, Expiration, clrDeepSkyBlue);
if(Ticket32>0)
{
Ticket332=Ticket32;
printf("Выставлен отложенный ордер на продажу SellLimit №"+(string)Ticket32);
PlaySound("Ok.wav");
}
}
if(Ticket333==0 && WorkMinus==true && WorkSL==true) //условия выставления отложенного ордера на продажу SellLimit3
{
int Ticket33=OrderSend(Symbol(), OP_SELLLIMIT, Lot33, Price33, spread, StopLoss33, TakeProfit33, NULL, 115201615, Expiration, clrDeepSkyBlue);
if(Ticket33>0)
{
Ticket333=Ticket33;
printf("Выставлен отложенный ордер на продажу SellLimit №"+(string)Ticket33);
PlaySound("Ok.wav");
}
}
if(Ticket44==0 && WorkPlus==true && WorkStop==true) //условия выставления отложенного ордера на покупку BuyStop
{
int Ticket4=OrderSend(Symbol(), OP_BUYSTOP, Lot, Price4, spread, StopLoss4, TakeProfit4, NULL, 115201615, Expiration, clrHotPink);
if(Ticket4>0)
{
Ticket44=Ticket4;
printf("Выставлен отложенный ордер на покупку BuyStop №"+(string)Ticket4);
PlaySound("Ok.wav");
}
}
if(Ticket55==0 && WorkMinus==true && WorkStop==true) //условия выставления отложенного ордера на продажу SellStop
{
int Ticket5=OrderSend(Symbol(), OP_SELLSTOP, Lot, Price5, spread, StopLoss5, TakeProfit5, NULL, 115201615, Expiration, clrRoyalBlue);
if(Ticket5>0)
{
Ticket55=Ticket5;
printf("Выставлен отложенный ордер на продажу SellStop №"+(string)Ticket5);
PlaySound("Ok.wav");
}
}
}
3.10 Функция трейлинг-стопа ордеров
void Trall()
{
for(int i=1; i<=OrdersTotal(); i++)
{
if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
int Tip =OrderType(); //тип выбранного ордера
int Ticket =OrderTicket(); //тикет выбранного ордера
double Price =OrderOpenPrice(); //цена открытия выбранного ордера
double StopLoss =OrderStopLoss(); //стоп-лосс выбранного ордера
double TakeProfit=OrderTakeProfit(); //тейк-профит выбранного ордера
while(true)
{
bool Modify=false;
switch(Tip)
{
case 0 :
if (NormalizeDouble(Bid,Digits)>NormalizeDouble(Price+TrallStop*Point,Digits))
{
TakeProfit=NULL;
StopLoss=NormalizeDouble(Price+100*Point,Digits);
Modify=true;
}
break;
case 1 :
if (NormalizeDouble(Ask,Digits)<NormalizeDouble(Price-TrallStop*Point,Digits))
{
TakeProfit=NULL;
StopLoss=NormalizeDouble(Price-100*Point,Digits);
Modify=true;
}
}
if (Modify==false)
break;
bool Ans=OrderModify(Ticket,Price,StopLoss,TakeProfit,clrGreen);
printf("Ордер №"+(string)Ticket+" модифицирован!");
PlaySound("Ok.wav");
break;
}
}
}
}
3.11 Функция обработки ошибок
bool Errors()
{
int Error=GetLastError();
switch(Error)
{
case 0 :
return(true);
case 2 :
printf("Общая ошибка "+(string)Error+"!");
return(false);
case 3 :
printf("Ошибка "+(string)Error+"! Неправильные параметры!");
return(false);
case 4 :
printf("Ошибка "+(string)Error+"! Торговый сервер занят!");
Sleep(600);
RefreshRates();
return(true);
case 5 :
printf("Ошибка "+(string)Error+"! Старая версия клиентского терминала!");
return(false);
case 6 :
printf("Ошибка "+(string)Error+"! Нет связи с торговым сервером!");
return(false);
case 7 :
printf("Ошибка "+(string)Error+"! Недостаточно прав!");
return(false);
case 8 :
printf("Ошибка "+(string)Error+"! Слишком частые запросы!");
return(false);
case 9 :
printf("Ошибка "+(string)Error+"! Недопустимая операция нарушающая функционирование сервера!");
return(false);
case 64:
printf("Ошибка "+(string)Error+"! Счет заблокирован!");
return(false);
case 65 :
printf("Ошибка "+(string)Error+"! Неправильный номер счета!");
return(false);
case 128 :
printf("Ошибка "+(string)Error+"! Истек срок ожидания совершения сделки!");
return(false);
case 129:
printf("Ошибка "+(string)Error+"! Неправильная цена!");
return(false);
case 130 :
printf("Ошибка "+(string)Error+"! Неправильные стопы!");
return(false);
case 131 :
printf("Ошибка "+(string)Error+"! Неправильный объем!");
return(false);
case 132 :
printf("Ошибка "+(string)Error+"! Рынок закрыт!");
return(false);
case 133:
printf("Ошибка "+(string)Error+"! Торговля запрещена!");
return(false);
case 134 :
printf("Ошибка "+(string)Error+"! Недостаточно денег для совершения операции!");
return(false);
case 135:
printf("Ошибка "+(string)Error+"! Цена изменилась!");
RefreshRates();
return(true);
case 136:
printf("Ошибка "+(string)Error+"! Нет цен, ждем новый тик!");
while(RefreshRates()==false)
Sleep(10);
return(true);
case 137 :
printf("Ошибка "+(string)Error+"! Брокер занят!");
return(true);
case 138 :
printf("Ошибка "+(string)Error+"! Новые цены!");
while(RefreshRates()==false)
Sleep(10);
return(true);
case 139 :
printf("Ошибка "+(string)Error+"! Ордер заблокирован и уже обрабатывается!");
return(true);
case 140 :
printf("Ошибка "+(string)Error+"! Разрешена только покупка!");
return(true);
case 141 :
printf("Ошибка "+(string)Error+"! Слишком много запросов!");
return(true);
case 145 :
printf("Ошибка "+(string)Error+"! Модификация запрещена, так как ордер слишком близко к рынку!");
return(true);
case 146:
printf("Ошибка "+(string)Error+"! Подсистема торговли занята!");
Sleep(500);
RefreshRates();
return(true);
case 147 :
printf("Ошибка "+(string)Error+"! Использование даты истечения ордера запрещено брокером!");
return(false);
case 148 :
printf("Ошибка "+(string)Error+"! Количество ордеров достигло предела, разрешенного брокером!");
return(false);
case 4017 :
printf("Ошибка "+(string)Error+"! Вызовы DLL не разрешены!");
return(false);
case 4018 :
printf("Ошибка "+(string)Error+"! Невозможно загрузить библиотеку!");
return(false);
case 4019 :
printf("Ошибка "+(string)Error+"! Невозможно вызвать функцию!");
return(false);
case 4020 :
printf("Ошибка "+(string)Error+"! Вызовы внешних библиотечных функций не разрешены!");
return(false);
case 4022 :
printf("Ошибка "+(string)Error+"! Система занята!");
Sleep(500);
RefreshRates();
return(true);
case 4055 :
printf("Ошибка "+(string)Error+" пользовательского индикатора!");
return(false);
case 4059 :
printf("Ошибка "+(string)Error+"! Функция не разрешена в тестовом режиме!");
return(false);
case 4066 :
printf("Ошибка "+(string)Error+"! Запрошенные исторические данные в состоянии обновления!");
return(true);
case 4067 :
printf("Ошибка "+(string)Error+" при выполнении торговой операции!");
return(false);
case 4107 :
printf("Ошибка "+(string)Error+"! Неправильный параметр цены для торговой функции!");
return(false);
case 4109 :
printf("Ошибка "+(string)Error+"! Торговля не разрешена!");
return(false);
case 4110 :
printf("Ошибка "+(string)Error+"! Длинные позиции не разрешены!");
return(false);
case 4111 :
printf("Ошибка "+(string)Error+"! Короткие позиции не разрешены!");
return(false);
default:
printf("Неизвестная ошибка "+(string)Error+"!");
return(false);
}
ResetLastError();
return(Error);
}
Литература
1. «Forex - трейдинг, практические аспекты торговли на мировых финансовых рынках» - Д.В. Раннев, Б.Н. Шилов;
2. «MetaTrader пособие для кофейников» - Б.Н. Шилов, Д.В. Раннев;
3. «Forex от первого лица» - Г.А. Петров, А.В. Ведихин, Б.Н. Шилов;
4. «Малая энциклопедия трейдера» - Э. Найман;
5. «Долгосрочные секреты краткосрочной торговли» - Л. Вильямс;
6. «Как играть и выигрывать на бирже» - А. Элдер;
7. «Биржевые секреты: технический анализ» - Д. Швагер;
Интернет-источники
1. http://book.mql4.com/ru/overview -- учебник по MQL4;
2. http://docs.mql4.com/ru -- справочник MQL4;
3. https://www.mql5.com/ru/docs -- справочник MQL5;
4. https://www.mql5.com/ru/code -- библиотека исходных кодов на MQL4 и MQL5;
5. https://www.mql5.com/ru/articles -- статьи по программированию на языках MQL4 и MQL5;
6. http://www.alpari.ru -- сайт компании ООО «Альпари»;
7. http://www.alpari.ru/ru/platforms/#tab=pc&slide=metatrader4 -- ссылка на скачивание терминала MetaTrader4;
Размещено на Allbest.ru
...Подобные документы
Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.
курсовая работа [823,0 K], добавлен 18.12.2011Реализация алгоритма Гомори на языке программирования Object Pascal при использовании среды разработки Borland Delphi 7. Рассмотрение основных способов компьютерного осуществления решения задач целочисленного программирования симплексным методом.
курсовая работа [1,8 M], добавлен 28.03.2013Решение базовых задач линейного программирования симплекс-методом, их реализация на языке программирования С++. Математическое обеспечение; разработка алгоритма программы, решающей задачу с помощью симплекс-таблиц с произвольными свободными членами.
курсовая работа [217,8 K], добавлен 25.05.2014Выполнение арифметических операций, этапы решения задач с помощью ЭВМ - постановка задачи, составление алгоритма решения, программная реализация алгоритма в среде Qbasic. Решение систем линейных уравнений по формулам Крамера. Графический режим Qbasic.
курсовая работа [101,7 K], добавлен 29.09.2009Основные принципы разработки программ. Разработка алгоритма решения задачи о пересечении двухвыпуклым многоугольником. Реализация разработанного алгоритма на языке программирования. Тесты для проверки работы программы. Графическая иллюстрация решения.
курсовая работа [53,3 K], добавлен 20.11.2015Основные понятия и принципы динамического программирования, реккурентность природы задач данного типа и функциональные уравнения Беллмана. Разработка структуры блок-схемы и реализация на ЭВМ построенного алгоритма на выбранном языке программирования.
курсовая работа [30,2 K], добавлен 26.11.2010Общая характеристика сетевой игры с несколькими клиентами в программной среде MS Visual Studio 2010 на языке программирования C++ с использованием функций работы с сокетами. Реализация системного сервиса, разработки интерфейса, алгоритм его тестирования.
курсовая работа [495,3 K], добавлен 06.01.2013Основные принципы моделирования систем массового обслуживания (СМО) на ЭВМ. Разработка моделирующего алгоритма и составление блок-схемы имитации торгового центра на ПЭВМ. Программа моделирования торгового центра на одном из языков программирования.
лабораторная работа [77,4 K], добавлен 15.06.2010Разработка и реализация программы расчета заданных функций на языке программирования VBA. Математическая модель, параметры и характеристики задачи, критерии оценки эффективности созданного модуля. Разработка алгоритма и тестирование программного модуля.
курсовая работа [488,7 K], добавлен 08.09.2010Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.
курсовая работа [1,4 M], добавлен 04.06.2013Теоретическая и практическая реализация комплексной арифметики на языке программирования Си. Разработка программы, производящей арифметические действия с комплексными числами. Автоматизации решения комплексных чисел. Матричная и стандартная модель.
курсовая работа [495,4 K], добавлен 21.01.2012Состав и принцип работы аппаратуры. Выбор параметров корреляционного анализа и Фурье-анализа. Разработка и применение алгоритма корреляционного анализа. Реализация алгоритма Фурье-анализа на языке С++ и алгоритма корреляционного анализа на языке С#.
дипломная работа [4,6 M], добавлен 30.11.2016Характеристика вычислительной системы и инструментов разработки. Программирование на языке Pascal в среде Turbo Pascal и на языке Object Pascal в среде Delphi. Использование процедур, функций, массивов, бинарного поиска. Создание базы данных в виде файла.
отчет по практике [2,1 M], добавлен 02.05.2014AnyLogic как инструмент компьютерного моделирования нового поколения. Процесс разработки моделей и реализация имитационных моделей для распространения эпидемического заболевания. Разработка систем обратной связи (диаграммы потоков и накопителей).
контрольная работа [1,8 M], добавлен 21.07.2014Создание программы, реализующей игру "Линии". Среда разработки программы, описание ее общего вида. Основные алгоритмы программы. Реализация программы в среде разработки Microsoft Visual Studio 2008 на языке объектно-ориентированного программирования С++.
курсовая работа [639,0 K], добавлен 16.03.2012Особенности и преимущества языка C#. Алгоритмы поиска маршрутов в графе. Разработка вычислительной системы транспортной логистики на языке C#. Выбор среды разработки, визуализация транспортной сети. Задание условий поиска и пример работы алгоритма.
дипломная работа [457,1 K], добавлен 24.06.2015Разработка игрового проекта на игровом движке Unity 3D в среде программирования MS Visual Studio 2017. Блок-схема алгоритма работы приема сообщений с сервера на клиенте с упрощенным описанием выполняемых команд. Реализация пользовательского интерфейса.
курсовая работа [1,5 M], добавлен 10.07.2017Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.
курсовая работа [314,2 K], добавлен 27.01.2015Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.
курсовая работа [812,6 K], добавлен 27.03.2012Создание алгоритма для построения синтаксического анализатора полиномов и его реализация в среде Visual Studio 2005 на языке программирования C#. Программное решение задачи поиска максимального числа единиц в бинарном представлении простых чисел.
курсовая работа [723,5 K], добавлен 04.10.2010