- •1.1.1 Краткие исторические сведения о торговле валютой
- •1.1.3 Рынок forex
- •1.1.4 Участники рынка forex
- •1.2 Обзор математических средств технического анализа
- •3.2 Программная реализация основных функций прототипа программной системы работы на валютном рынке на основе метода системного скальпирования
- •3.3 Проверка работоспособности программы
3.2 Программная реализация основных функций прототипа программной системы работы на валютном рынке на основе метода системного скальпирования
В ходе программной реализации основных функций работы метода системного скальпирования в среде VisualStudio 2013 [12, 13]на языке С++ разработаны следующие фрагменты кода программы.
Приведём листинг подключения стандартных библиотек.
Начало листинг 1 |
#include "stdafx.h" #include <iostream> #include <fstream> #include <math.h> |
Конец листинг 1 |
Функция, которая ищет «сильный скачок», приведена в листинге 2.
Начало листинг 2 |
int JumpExists(double*Mas, int i, double Delta1Min, double Delta2Min, int sizeW) //Функция ищет сильный скачок, возвращает знак этого скачка { int sign0, iw; //Анализ величины всего скачка sign0 = 0; if (fabs(Mas[i] - Mas[i - sizeW]) < Delta2Min) { cout << "There isn't big leap i= " << i << endl; return 0; } //Проверить этот скачок был вверх или вниз if (Mas[i] < Mas[i - sizeW]) { sign0 = -1;//вниз cout << "There is common jump down i= " << i << endl; } else { sign0 = 1;//вверх cout << "There is common jump up i= " << i << endl; }
//Анализ элементов в окне for (iw = 1; iw<sizeW; iw++) { //проверка на величину разности if (fabs(Mas[i - sizeW + iw] - Mas[i - sizeW + iw - 1]) < Delta1Min) { cout << "There isn't leap iw= " << iw << endl; return 0; }
//проверка на знак разности if (sign0 < 0)//должно быть вниз { if (Mas[i - sizeW + iw]>Mas[i - sizeW + iw - 1]) { //найдено движение вверх cout << "Differently directed leaps iw= " << iw << endl; return 0; } } else //должно быть вверх { if (Mas[i - sizeW + iw] < Mas[i - sizeW + iw - 1]) { //найдено движение вниз cout << "Differently directed leaps iw= " << iw << endl; return 0; } } }
return sign0; } |
Конец листинг 2 |
Функция, которая ищет, когда график валютной пары sizeR раз пошёл в противоположном направлении от направления «сильного скачка», приведена в листинге 3.
Начало листинг 3 |
int ReturnExists(double*Mas, int i, int sign0, int sizeR) //Функция ищет, когда график sizeR раз пошёл в противоположном направлении от главного //0-нет обратного движения, 1-обнаружено обратное движение { for (int iw = 1; iw<sizeR; iw++) { //проверить на знак разности if (sign0 < 0)//открытие было вниз { if (Mas[i - sizeR + iw] < Mas[i - sizeR + iw - 1]) //обнаружено движение вниз return 0; }
else//открытие было вверх { if (Mas[i - sizeR + iw]>Mas[i - sizeR + iw - 1]) //обнаружено движение вверх return 0; } }
return 1; } |
Конец листинг 3 |
Фрагмент программы открытия позиции по выбранной рабочей валютной паре приведён в листинге 4.
Начало листинг 4 |
//открыть позицию switch (WorkPair) { case 'e': { if (signEURUSD < 0) cout << "Open short position EURUSD (sell) i= "<< i << endl; else cout << "Open long position EURUSD (buy) i= "<< i << endl; break; } case 'g': { if (signGBPUSD < 0) cout << "Open short position GBPUSD (sell) i= "<< i << endl; else cout << "Open long position GBPUSD (buy) i= "<< i << endl; break; } case 'c': { if (signUSDCHF < 0) cout << "Open short position USDCHF (sell) i= "<< i << endl; else cout << "Open long position USDCHF (buy) i= "<< i << endl; break; } case 'j': { if (signUSDCHF < 0) cout << "Open short position USDJPY (sell) i= "<< i << endl; else cout << "Open long position USDJPY (buy) i= "<< i << endl; break; } default: cout << "error1" << endl; }//switch FlagOpen = 1; |
Конец листинг 4 |
Фрагмент программы закрытия позиции по выбранной рабочей валютной паре приведён в листинге 5.
Начало листинг 5 |
//закрыть позицию switch (WorkPair) { case'e':{ ReturnEURUSD = ReturnExists(EUR, i, signEURUSD, sizeR); if (ReturnEURUSD > 0) { cout << "Close position EURUSD i= " << i << endl; FlagOpen = 0; } else cout << "Keep open position i= " << i << endl; break; } case'g':{ ReturnGBPUSD = ReturnExists(GBP, i, signGBPUSD, sizeR); if (ReturnGBPUSD > 0) { cout << "Close position GBPUSD i= " << i << endl; FlagOpen = 0; } else cout << "Keep open position i= " << i << endl; break; } case'c':{ ReturnUSDCHF = ReturnExists(CHF, i, signUSDCHF, sizeR); if (ReturnUSDCHF > 0) { cout << "Close position USDCHF i= " << i << endl; FlagOpen = 0; } else cout << "Keep open position i= " << i << endl; break; } case'j':{ ReturnUSDJPY = ReturnExists(JPY, i, signUSDJPY, sizeR); if (ReturnUSDJPY > 0) { cout << "Close position USDJPY i= " << i << endl; FlagOpen = 0; } else cout << "Keep open position i= " << i << endl; break; } default: cout << "error2" << endl; }//switch
|
Конец листинг 5 |
Полный листинг кода программы, реализующей метод оптимальной классификации, приведён в приложении А.