Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт по практике.docx
Скачиваний:
7
Добавлен:
16.03.2016
Размер:
436.17 Кб
Скачать

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

Полный листинг кода программы, реализующей метод оптимальной классификации, приведён в приложении А.