Програмний структурний код виглядає так:
//+------------------------------------------------------------------+//| 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 parametersextern int ExtDepth=12;extern int ExtDeviation=5;extern int ExtBackstep=3;//---- indicator buffersdouble 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); }//+------------------------------------------------------------------+
4.2 Приклад інтерфейсу
Індикатор добавляється як і всі інші, - через «Головне меню» → Вставка → Індикатори → Осцилятори → «SV-Trend»
Індикатор працює на всіх періодах, які підтримує «Meta| Trader| 4». Незважаючи на складність ідеї та обширність розробки індикатора, – працює він дуже просто: коли індикатор прогнозує спадаючий тренд, в наступному періоді, червоним кольором індукується «Sell»(рис. 4.1.), а при прогнозі зростаючого тренду уже синім кольором індукується «Buy»
Індикатор «SV-Trend» - являе собою не тільки гріфічне представлення запропонованого методу, а ще і удосконаленням технічних характеристик, так як він дає можливість обнови вхідник даних, – а це означає збільшення єкономічного ефекту.
Рис. 4.1. Приклад інтерфуйсу програми «Meta| Trader| 4» з
индикатором «SV-Trend»
5. Охорона праці
5.1 Інженерний - технічні заходи
5.1.1 Шкідливі і небезпечні чинники при роботі з ПК і їх вплив на
організм людини
В даний часПЕВМ широко застосовуються в різних областях людської діяльності, що дозволяє звільнитися від виконання великої кількості рутинних операцій і підвищити продуктивність праці. Не дивлячись на всі позитивні аспекти масового розповсюдження ПЕВМ існує і ряд негативних чинників, виявлення яких, оцінка впливу на людину і розробка мерів по їх усуненню або мінімізації є актуальними завданнями на сьогоднішній день. На нашому підприємстві можна виділити наступні:
1) Дисплеївиконані на електронно-променевих трубках, є потенційним джерелом м'якого рентгенівського, ультрафіолетового, інфрачервоного, видимого, радіочастотного, сверх- і низькочастотного електромагнітного випромінювань.
2) Нізькоінтенсивні електромагнітні випромінюваннямають місце на робочих місцях користувачів ПК, які не перевищують допустимих значень електричних і магнітних полів для діапазону частот бОкГц - ЗООмгц. Максимальний рівень напруженості електричного поля реєструється у задньої панелі дисплея і декілька менше на відстані 10 см від екрану і корпусу дисплея.
4) Візуальні параметри(неправильний підбір розміру і кольору букв, фону, кутового розміру знаку, який залежить як від типу шрифту, так і від його розміру і тому подібне).
5) Шум комп'ютерахарактеризується власне шумом ПК і шумом принтера. По-перше зустрічаються погано працюючі вентиляторипроцесора (зношуються від часу або недосвідчені користувачі дуже щільно їх притискують до процесора).
По-друге, на матричних принтерах,навіть, якщо загальний рівень шуму не перевищує гранично допустимого, перевищення в окремих частотах і вельми значні, звичайне явище.
6) Електростатичний потенціал екрану.Вплив на людину – притягує і електризує пил – людина її вдихає – в результаті стимулюється розвиток онкологічних захворювань легенів.
7) Наявність пилу, озону, оксидів азоту і аероіонізації. Відповідно до ГОСТ 12.1.005-88 зміст озону в повітрі робочої зони не повинно перевищувати 0,1 міліграм/куб. м; зміст оксидів азоту – 5 міліграм/куб. м; зміст пилу – 4 міліграм/куб. р.
5.1.2 Заходи щодо боротьби з шкідливими і небезпечними чинникамипри роботі з ПК
Для боротьби з такими чинниками, як рентгенівське, ультрафіолетове, низькочастотне і ін. випромінюваннями потрібно застосовувати захисний екран або монітор вищої якості.
Для запобігання стомленню очей при роботі з ПК необхідно дотримувати оптимальні параметри яскравості, контрасту, кутових розмірів знаків, частоти зміни кадрів і інших характеристик екранного зображення. Також необхідно робити періодично перерви в роботі, витримувати візуальні параметри при роботі з монітором. Установка шрифту повинна бути не менше Arial Cyr 12.
Для боротьби з шумом ПК необхідне регулярне мастило вентиляторів або при необхідності своєчасна їх заміна. Для запобігання шуму при роботі з принтером необхідна модернізація по можливості матричного на лазерний принтер і застосування засобів шумопоглинання: негорючі або тяжкоспалахуючі спеціальні перфоровані плити, панелі, мінеральна вата з максимальним коефіцієнтом звукопоглинання в межах частот 31,5 - 8000 Гц, або інші матеріали аналогічного призначення, дозволені для устаткування приміщень органами державного санітарно-епідеміологічного нагляду. Крім того, необхідно застосовувати підвісні стелі з аналогічними властивостями.
Для боротьби з такими чинниками, як електростатичний потенціал екрану, пил і тому подібненеобхідне проведення заходів щодо провітрювання і прибирання робочого приміщення.
5.2 Загальні вимоги до організації робочого місця користувача ЕОМ
Організація робочого місця користувача відеотерміналу і ЕОМ повинна забезпечувати відповідність всіх елементів робочого місця і їх розташування ергономічним вимогам ГОСТ 12.2.032. Площа, виділена для одного робочого місця з відеотерміналом або ПК, повинна складати не менше 6 кв. м, а об'єм - не менше 20 куб. м.
Головними елементами робочого місця трейдера є письмовий стіл і крісло. Основним робочим положенням є положення сидячи.
Робоча поза сидячи викликає мінімальне стомлення програміста. Раціональне планування робочого місця передбачає чіткий порядок і постійність розміщення предметів – засобів праці і документації. Те, що потрібний для виконання робіт частіше, розташоване в зоні легкої досяжності робочого простору.
Моторне поле - простір робочого місця, в якому можуть здійснюватися рухові дії людини.
Максимальна зона досяжності рук – це частина моторного поля робочого місця, обмеженого дугами, описуваними максимально витягнутими руками при русі їх в плечовому суглобі.
Оптимальна зона - частина|частка| моторного поля робочого місця|місце-милі|, обмеженого дугами, описуваними передпліччями| при русі в ліктьових суглобах з|із| опорою в точці ліктя і з|із| відносно нерухомим плечем (рис. 5.1.).
Рис. 5.1. – Зони досяжності рук в горизонтальній площині
а – зона максимальної досяжності;
б – зона досяжності пальців при витягнутій руці;
і – зона легкої досяжності долоні:
г – оптимальний простір для грубої ручної роботи;
д – оптимальний простір для тонкої ручної роботи.
Розглянемо оптимальне розміщення предметів праці і документації в зонах досяжності рук:
ДИСПЛЕЙ – розміщується в зоні а (у центрі);
КЛАВІАТУРА – в зоні г/д;
СИСТЕМНИЙ БЛОК – розміщується в зоні б (зліва);
ПРИНТЕР – знаходиться в зоні а (справа);
ДОКУМЕНТАЦІЯ:
1) у зоні легкої досяжності долоні – в (зліва) - література і документація, необхідна при роботі;
2) у висувних ящиках столу – література, невживана постійно.
При проектуванні письмового столу слід враховувати наступне:
• висота столу повинна бути вибрана з урахуванням можливості сидіти вільно, в зручній позі, при необхідності спираючись на підлокітники;
• нижня частина столу повинна бути сконструйована так, щоб програміст міг зручно сидіти, не був вимушений підтискати ноги;
• поверхня столу повинна володіти властивостями, що виключають появу відблисків у полі зору програміста;