3.3 Перевірка якості прогнозування


Щоб перевірити якість прогнозування простежимо поведінку крос-курсу EUR/JPY в минулому, підставляємо в формулу (2.2) деякий період.

Нехай у нас є 10-ть проміжків часу – ми беремо 9-ть, прогнозуємо і спів ставляємо історію крос-курсу з виданим прогнозом кібернетичної моделі (рис. 3.4.).


Оптимізація біржової торгівлі конвертованими валютами на базі прогнозування їх крос-курсів на прикладі діяльності приватного підприємця

Рис. 3.4. – Співставлення математичного прогнозу з історією

графіка крос-курса

Бачимо, що математичний прогноз справдився. Для статистичних підрахунків довірчої ймовірності пропрацюємо перевірку прогнозу ще близько 100-а разів.

Так після перевірки прогнозування були виведені такі результати:

86,8% прогнозів, які робились за допомогою нового математично методу – справдились. Це на 40,2% краще ніж давно відомі методи мат. аналізу (Williams' Percent Range, Stochastic Oscillator, Bollinger Bands)

4. РОЗРОБКА ІНФОРМАЦІЙНОЇ СИСТЕМИ


Розробка ІС для реалізації запропонованого методу

Для продуктивної торгівлі на міжнародному валютному ринку потрібно мати мобільну систему інформаційно-технічних методів. Швидкість подачі новин, швидкість реакції індикаторів, осциляторів, реакція брокера на фундаментальні фактори – все це є невід’ємною частиною успішної торгівлі.

Сьогодні, коли інформаційні системи, комп’ютеризація набирають обертів з галопуючим темпом, всі нововведення, науково-дослідні випробування потрібно представляти у вигляді інформаційної, автоматизованої системи.

Новий метод прогнозування періодичних процесів, створений для крос-курсів конвертованих валют, – не є виключенням.

Для практичного застосування запропонованого мною математичного методу, потрібно завантажити архів котирувань, перетворення Фур‘є краще всього робити за допомогою прикладної програми «Statistica 6.0», потім отримані дані необхідно імпортувати в MS Excel і вже там за допомогою «Пошуку рішень» знайти необхідні коефіцієнти. З таким широким алгоритмом майже неможливо вести внутриденну торгівлю. Тому необхідно розробити інформаційну систему.

Краще всього, новорозроблена математична модель автоматизується в торговому терміналі «Meta Trader 4» на основі вбудованого редактора «Meta Editor», мова якого нагадує мову програмування «С++». Дамо новому математичному індикатору назву «SV-Trend», - після компіляції повна назва індикатора буде: «SV-Trend.mq4»

Програмний структурний код виглядає так:

//+------------------------------------------------------------------+

//| SV-Trend.mq4 |

//| Copyright © 2005-2007, MetaQuotes Software Corp. |

//| http://www.metaquotes.net/ |

//+------------------------------------------------------------------+

#property copyright

#property link

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 Red

//---- indicator parameters

extern int ExtDepth=12;

extern int ExtDeviation=5;

extern int ExtBackstep=3;

//---- indicator buffers

double SV-TrendBuffer[];

double HighMapBuffer[];

double LowMapBuffer[];

int level=3; // recounting's depth

bool downloadhistory=false;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

IndicatorBuffers(3);

//---- drawing settings

SetIndexStyle(0,DRAW_SECTION);

//---- indicator buffers mapping

SetIndexBuffer(0,SV-TrendBuffer);

SetIndexBuffer(1,HighMapBuffer);

SetIndexBuffer(2,LowMapBuffer);

SetIndexEmptyValue(0,0.0);


//---- indicator short name

IndicatorShortName("SV-Trend("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");

//---- initialization done

return(0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

int i, counted_bars = IndicatorCounted();

int limit,counterZ,whatlookfor;

int shift,back,lasthighpos,lastlowpos;

double val,res;

double curlow,curhigh,lasthigh,lastlow;


if (counted_bars==0 && downloadhistory) // history was downloaded

{

ArrayInitialize(SV-TrendBuffer,0.0);

ArrayInitialize(HighMapBuffer,0.0);

ArrayInitialize(LowMapBuffer,0.0);

}

if (counted_bars==0)

{

limit=Bars-ExtDepth;

downloadhistory=true;

}

if (counted_bars>0)

{

while (counterZ<level && i<100)

{

res=SV-TrendBuffer[i];

if (res!=0) counterZ++;

i++;

}

i--;

limit=i;

if (LowMapBuffer[i]!=0)

{

curlow=LowMapBuffer[i];

whatlookfor=1;

}

else

{

curhigh=HighMapBuffer[i];

whatlookfor=-1;

}

for (i=limit-1;i>=0;i--)

{

SV-TrendBuffer[i]=0.0;

LowMapBuffer[i]=0.0;

HighMapBuffer[i]=0.0;

}

}

for(shift=limit; shift>=0; shift--)

{

val=Low[iLowest(NULL,0,MODE_LOW,ExtDepth,shift)];

if(val==lastlow) val=0.0;

else

{

lastlow=val;

if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;

else

{

for(back=1; back<=ExtBackstep; back++)

{

res=LowMapBuffer[shift+back];

if((res!=0)&&(res>val)) LowMapBuffer[shift+back]=0.0;

}

}

}

if (Low[shift]==val) LowMapBuffer[shift]=val; else LowMapBuffer[shift]=0.0;

//--- high

val=High[iHighest(NULL,0,MODE_HIGH,ExtDepth,shift)];

if(val==lasthigh) val=0.0;

else

{

lasthigh=val;

if((val-High[shift])>(ExtDeviation*Point)) val=0.0;

else

{

for(back=1; back<=ExtBackstep; back++)

{

res=HighMapBuffer[shift+back];

if((res!=0)&&(res<val)) HighMapBuffer[shift+back]=0.0;

}

}

}

if (High[shift]==val) HighMapBuffer[shift]=val; else HighMapBuffer[shift]=0.0;

}


// final cutting

if (whatlookfor==0)

{

lastlow=0;

lasthigh=0;

}

else

{

lastlow=curlow;

lasthigh=curhigh;

}

for (shift=limit;shift>=0;shift--)

{

res=0.0;

switch(whatlookfor)

{

case 0: // look for peak or lawn

if (lastlow==0 && lasthigh==0)

{

if (HighMapBuffer[shift]!=0)

{

lasthigh=High[shift];

lasthighpos=shift;

whatlookfor=-1;

SV-TrendBuffer[shift]=lasthigh;

res=1;

}

if (LowMapBuffer[shift]!=0)

{

lastlow=Low[shift];

lastlowpos=shift;

whatlookfor=1;

SV-TrendBuffer[shift]=lastlow;

res=1;

}

}

break;

case 1: // look for peak

if (LowMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<lastlow && HighMapBuffer[shift]==0.0)

{

SV-TrendBuffer[lastlowpos]=0.0;

lastlowpos=shift;

lastlow=LowMapBuffer[shift];

SV-TrendBuffer[shift]=lastlow;

res=1;

}

if (HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0)

{

lasthigh=HighMapBuffer[shift];

lasthighpos=shift;

SV-TrendBuffer[shift]=lasthigh;

whatlookfor=-1;

res=1;

}

break;

case -1: // look for lawn

if (HighMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>lasthigh && LowMapBuffer[shift]==0.0)

{

SV-TrendBuffer[lasthighpos]=0.0;

lasthighpos=shift;

lasthigh=HighMapBuffer[shift];

SV-TrendBuffer[shift]=lasthigh;

}

if (LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]==0.0)

{

lastlow=LowMapBuffer[shift];

lastlowpos=shift;

SV-TrendBuffer[shift]=lastlow;

whatlookfor=1;

}

break;

default: return;

}

}


return(0);

}

//+------------------------------------------------------------------+


Информация о работе «Оптимізація біржової торгівлі конвертованими валютами на базі прогнозування їх крос-курсів на прикладі діяльності приватного підприємця»
Раздел: Экономико-математическое моделирование
Количество знаков с пробелами: 90450
Количество таблиц: 12
Количество изображений: 26

0 комментариев


Наверх