//+------------------------------------------------------------------+ //| Тралл 007.mq4 | //| sever11 | //| | //+------------------------------------------------------------------+ #property copyright "sever11" // автор #property link "" // разработчик "scriptong@mail.ru" //---- input parameters extern string A1="Комментарий 1-го типа и установки в пунктах"; extern string Comment1="1"; extern int SL10 = 177; extern int TP10 = 9600; extern int SL11=6; //стоп в безубыток + 6 пп. ставим extern int Prof11 = 153;//при достижении профита в 153 пп. extern int SL12=60; //стоп в безубыток + 60 пп. ставим extern int Prof12 = 261;//при достижении профита в 261 пп. extern int SL13=261; //стоп в безубыток + 261 пп. ставим extern int Prof13 = 546;//при достижении профита в 546 пп. extern int SL14=546; //стоп в безубыток + 546 пп. ставим extern int Prof14 = 1950;//при достижении профита в 1950 пп. extern int SL15=960; //стоп в безубыток + 960 пп. ставим extern int Prof15 = 2319;//при достижении профита в 2319 пп. extern int SL16=1950; //стоп в безубыток + 1950 пп. ставим extern int Prof16 = 3650;//при достижении профита в 3650 пп.. extern int SL17=3561; //стоп в безубыток + 3561 пп. ставим extern int Prof17 = 5831;//при достижении профита в 5831 пп. extern int SL18=4570; //стоп в безубыток + 4570 пп. ставим extern int Prof18 = 6360;//при достижении профита в 6360 пп. extern int SL19=5460; //стоп в безубыток + 5460 пп. ставим extern int Prof19 = 7218;//при достижении профита в 7218 пп. extern string A1_1="========================================"; extern string A2="Комментарий 2-го типа и установки в пунктах"; extern string Comment2="2"; extern int SL20=177; // первоначальный стоп extern int TP20=10440; // тэйкпрофит extern int SL21=2; //стоп в безубыток + 2 пп. ставим extern int Prof21 = 167;//при достижении профита в 167 пп. extern int SL22=32; //стоп в безубыток + 32 пп. ставим extern int Prof22 = 267;//при достижении профита в 267 пп. extern int SL23=261; //стоп в безубыток + 261 пп. ставим extern int Prof23 = 685;//при достижении профита в 685 пп. extern int SL24=630; //стоп в безубыток + 630 пп. ставим extern int Prof24 = 1554;//при достижении профита в 1554 пп. extern int SL25=915; //стоп в безубыток + 915 пп. ставим extern int Prof25 = 2188;//при достижении профита в 2188 пп. extern int SL26=1650; //стоп в безубыток + 1650 пп. ставим extern int Prof26 = 2853;//при достижении профита в 2853 пп. extern int SL27=2752; //стоп в безубыток + 2752 пп. ставим extern int Prof27 = 3660;//при достижении профита в 3660 пп. extern int SL28=3660; //стоп в безубыток + 3660 пп. ставим extern int Prof28 = 4290;//при достижении профита в 4290 пп. extern int SL29=4140; //стоп в безубыток + 4140 пп. ставим extern int Prof29 = 5910;//при достижении профита в 5910 пп. extern string A2_1="========================================"; extern string A3="Комментарий 3-го типа и установки в пунктах"; extern string Comment3="3"; extern int SL30=188; // первоначальный стоп extern int TP30=4970; // тэйкпрофит extern int SL31=2; //стоп в безубыток + 2 пп. ставим extern int Prof31 = 168;//при достижении профита в 168 пп. extern int SL32=68; //стоп в безубыток + 68 пп. ставим extern int Prof32 = 339;//при достижении профита в 339 пп. extern int SL33=142; //стоп в безубыток + 142 пп. ставим extern int Prof33 = 572;//при достижении профита в 572 пп. extern int SL34=264; //стоп в безубыток + 264 пп. ставим extern int Prof34 = 715;//при достижении профита в 715 пп. extern int SL35=753; //стоп в безубыток + 753 пп. ставим extern int Prof35 = 1355;//при достижении профита в 1355 пп. extern int SL36=1129; //стоп в безубыток + 1129 пп. ставим extern int Prof36 = 1506;//при достижении профита в 1506 пп. extern int SL37=1204; //стоп в безубыток + 1204 пп. ставим extern int Prof37 = 2108;//при достижении профита в 2108 пп. extern int SL38=1506; //стоп в безубыток + 1506 пп. ставим extern int Prof38 = 2560;//при достижении профита в 2560 пп. extern int SL39=2108; //стоп в безубыток + 2108 пп. ставим extern int Prof39 = 3012;//при достижении профита в 3012 пп. extern string A3_1="========================================"; extern string A4="Комментарий 4-го типа и установки в пунктах"; extern string Comment4="4"; extern int SL40=237; // первоначальный стоп extern int TP40=6029; // тэйкпрофит extern int SL41=2; //стоп в безубыток + 2 пп. ставим extern int Prof41 = 186;//при достижении профита в 186 пп. extern int SL42=72; //стоп в безубыток + 72 пп. ставим extern int Prof42 = 425;//при достижении профита в 425 пп. extern int SL43=188; //стоп в безубыток + 188 пп. ставим extern int Prof43 = 825;//при достижении профита в 825 пп. extern int SL44=288; //стоп в безубыток + 288 пп. ставим extern int Prof44 = 949;//при достижении профита в 949 пп. extern int SL45=932; //стоп в безубыток + 932 пп. ставим extern int Prof45 = 1708;//при достижении профита в 1708 пп. extern int SL46=1425; //стоп в безубыток + 1425 пп. ставим extern int Prof46 = 1898;//при достижении профита в 1898 пп. extern int SL47=1518; //стоп в безубыток + 1518 пп. ставим extern int Prof47 = 2657;//при достижении профита в 2657 пп. extern int SL48=1898; //стоп в безубыток + 1898 пп. ставим extern int Prof48 = 3227;//при достижении профита в 3227 пп. extern int SL49=2657; //стоп в безубыток + 2657 пп. ставим extern int Prof49 = 3796;//при достижении профита в 5469 пп. extern string A4_1="========================================"; extern string A5="Комментарий 5-го типа и установки в пунктах"; extern string Comment5="5"; extern int SL50=300; // первоначальный стоп extern int TP50=7286; // тэйкпрофит extern int SL51=2; //стоп в безубыток + 2 пп. ставим extern int Prof51 = 339;//при достижении профита в 339 пп. extern int SL52=124; //стоп в безубыток + 124 пп. ставим extern int Prof52 = 608;//при достижении профита в 608 пп. extern int SL53=248; //стоп в безубыток + 248 пп. ставим extern int Prof53 = 950;//при достижении профита в 950 пп. extern int SL54=590; //стоп в безубыток + 590 пп. ставим extern int Prof54 = 1265;//при достижении профита в 1265 пп. extern int SL55=1196; //стоп в безубыток + 1196 пп. ставим extern int Prof55 = 2152;//при достижении профита в 2152 пп. extern int SL56=1725; //стоп в безубыток + 1725 пп. ставим extern int Prof56 = 3357;//при достижении профита в 3357 пп. extern int SL57=2398; //стоп в безубыток + 2398 пп. ставим extern int Prof57 = 4077;//при достижении профита в 4077 пп. extern int SL58=3357; //стоп в безубыток + 3357 пп. ставим extern int Prof58 = 4796;//при достижении профита в 4796 пп. extern int SL59=5036; //стоп в безубыток + 5036 пп. ставим extern int Prof59 = 5995;//при достижении профита в 5995 пп. extern string A5_1="========================================"; extern string A6="Комментарий 6-го типа и установки в пунктах"; extern string Comment6="6"; extern int SL60=390; // первоначальный стоп extern int TP60=8736; // тэйкпрофит extern int SL61=1; //стоп в безубыток + 1 пп. ставим extern int Prof61 = 396;//при достижении профита в 396 пп. extern int SL62=50; //стоп в безубыток + 50 пп. ставим extern int Prof62 = 650;//при достижении профита в 650 пп. extern int SL63=266; //стоп в безубыток + 266 пп. ставим extern int Prof63 = 1290;//при достижении профита в 1290 пп. extern int SL64=1300; //стоп в безубыток + 1300 пп. ставим extern int Prof64 = 2340;//при достижении профита в 2340 пп. extern int SL65=1950; //стоп в безубыток + 1950 пп. ставим extern int Prof65 = 2640;//при достижении профита в 2640 пп. extern int SL66=2080; //стоп в безубыток + 2080 пп. ставим extern int Prof66 = 3640;//при достижении профита в 3640 пп. extern int SL67=2600; //стоп в безубыток + 2600 пп. ставим extern int Prof67 = 4420;//при достижении профита в 4420 пп. extern int SL68=3640; //стоп в безубыток + 3640 пп. ставим extern int Prof68 = 5200;//при достижении профита в 5200 пп. extern int SL69=5454; //стоп в безубыток + 5454 пп. ставим extern int Prof69 = 6500;//при достижении профита в 6500 пп. extern string A6_1="========================================"; extern string A7="Комментарий 7-го типа и установки в пунктах"; extern string Comment7="7"; extern int SL70=701; // первоначальный стоп extern int TP70=12868; // тэйкпрофит extern int SL71=2; //стоп в безубыток + 2 пп. ставим extern int Prof71 = 586;//при достижении профита в 586 пп. extern int SL72=51; //стоп в безубыток + 51 пп. ставим extern int Prof72 = 940;//при достижении профита в 940 пп. extern int SL73=418; //стоп в безубыток + 418 пп. ставим extern int Prof73 = 1985;//при достижении профита в 1985 пп. extern int SL74=2086; //стоп в безубыток + 2086 пп. ставим extern int Prof74 = 3755;//при достижении профита в 3755 пп. extern int SL75=3130; //стоп в безубыток + 3130 пп. ставим extern int Prof75 = 4172;//при достижении профита в 4172 пп. extern int SL76=3134; //стоп в безубыток + 3134 пп. ставим extern int Prof76 = 5850;//при достижении профита в 5850 пп. extern int SL77=4172; //стоп в безубыток + 4172 пп. ставим extern int Prof77 = 7092;//при достижении профита в 7092 пп. extern int SL78=5849; //стоп в безубыток + 5849 пп. ставим extern int Prof78 = 8356;//при достижении профита в 8356 пп. extern int SL79=8874; //стоп в безубыток + 8874 пп. ставим extern int Prof79 = 10445;//при достижении профита в 10445 пп. extern string A7_1="========================================"; extern string A8="Комментарий 8-го типа и установки в пунктах"; extern string Comment8="8"; extern int SL80=688; // первоначальный стоп extern int TP80=31605; // тэйкпрофит extern int SL81=2; //стоп в безубыток + 2 пп. ставим extern int Prof81 = 614;//при достижении профита в 614 пп. extern int SL82=122; //стоп в безубыток + 122 пп. ставим extern int Prof82 = 1720;//при достижении профита в 1720 пп. extern int SL83=1205; //стоп в безубыток + 1205 пп. ставим extern int Prof83 = 4644;//при достижении профита в 4644 пп. extern int SL84=6110; //стоп в безубыток + 6110 пп. ставим extern int Prof84 = 10998;//при достижении профита в 10998 пп. extern int SL85=9165; //стоп в безубыток + 9165 пп. ставим extern int Prof85 = 12220;//при достижении профита в 12220 пп. extern int SL86=9776; //стоп в безубыток + 9776 пп. ставим extern int Prof86 = 17108;//при достижении профита в 17108 пп. extern int SL87=12220; //стоп в безубыток + 12220 пп. ставим extern int Prof87 = 20774;//при достижении профита в 20774 пп. extern int SL88=17108; //стоп в безубыток + 17108 пп. ставим extern int Prof88 = 24440;//при достижении профита в 24440пп. extern int SL89=25662; //стоп в безубыток + 26662 пп. ставим extern int Prof89 = 30550;//при достижении профита в 30550 пп. extern string A8_1="========================================"; extern string A9="Комментарий 9-го типа и установки в пунктах"; extern string Comment9="9"; extern int SL90=1071; // первоначальный стоп extern int TP90=46500; // тэйкпрофит extern int SL91=2; //стоп в безубыток + 2 пп. ставим extern int Prof91 = 968;//при достижении профита в 968 пп. extern int SL92=270; //стоп в безубыток + 270 пп. ставим extern int Prof92 = 2196;//при достижении профита в 2196 пп. extern int SL93=540; //стоп в безубыток + 540 пп. ставим extern int Prof93 = 4482;//при достижении профита в 4482 пп. extern int SL94=4482; //стоп в безубыток + 4482 пп.. ставим extern int Prof94 = 8764;//при достижении профита в 8764 пп. extern int SL95=7303; //стоп в безубыток + 7303 пп. ставим extern int Prof95 = 9738;//при достижении профита в 9738 пп. extern int SL96=7790; //стоп в безубыток + 7790 пп. ставим extern int Prof96 = 13633;//при достижении профита в 13633 пп. extern int SL97=9738; //стоп в безубыток + 9738 пп. ставим extern int Prof97 = 16555;//при достижении профита в 16555 пп. extern int SL98=13633; //стоп в безубыток + 13633 пп. ставим extern int Prof98 = 19476;//при достижении профита в 19476 пп. extern int SL99=20450; //стоп в безубыток + 20450 пп. ставим extern int Prof99 = 24345;//при достижении профита в 24345 пп. extern string A9_1="========================================"; extern string A10="Комментарий 10-го типа и установки в пунктах"; extern string Comment10="10"; extern int SL100=1748; // первоначальный стоп extern int TP100=65400; // тэйкпрофит extern int SL101=2; //стоп в безубыток + 2 пп. ставим extern int Prof101 = 1569;//при достижении профита в 1569 пп. extern int SL102=61; //стоп в безубыток + 61 пп. ставим extern int Prof102 = 5530;//при достижении профита в 5530 пп. extern int SL103=1160; //стоп в безубыток + 1160 пп. ставим extern int Prof103 = 8858;//при достижении профита в 8858 пп. extern int SL104=11650; //стоп в безубыток + 11650 пп. ставим extern int Prof104 = 20979;//при достижении профита в 20979 пп. extern int SL105=17480; //стоп в безубыток + 17480 пп. ставим extern int Prof105 = 23310;//при достижении профита в 23310 пп. extern int SL106=18648; //стоп в безубыток + 18648 пп. ставим extern int Prof106 = 32634;//при достижении профита в 32634 пп. extern int SL107=23310; //стоп в безубыток + 23310 пп. ставим extern int Prof107 = 39627;//при достижении профита в 39627 пп. extern int SL108=32634; //стоп в безубыток + 32634 пп. ставим extern int Prof108 = 46620;//при достижении профита в 46620 пп. extern int SL109=58275; //стоп в безубыток + 58275 пп. ставим extern int Prof109 = 62360;//при достижении профита в 62360 пп. extern string A10_1="========================================"; extern string A11="Комментарий 11-го типа и установки в пунктах"; extern string Comment11="11"; extern int SL200=1850; // первоначальный стоп extern int TP200=98960; // тэйкпрофит extern int SL201=2; //стоп в безубыток + 2 пп. ставим extern int Prof201 = 1724;//при достижении профита в 1724 пп. extern int SL202=27; //стоп в безубыток + 27 пп. ставим extern int Prof202 = 5596;//при достижении профита в 5596 пп. extern int SL203=968; //стоп в безубыток + 968 пп. ставим extern int Prof203 = 9686;//при достижении профита в 9686 пп. extern int SL204=1760; //стоп в безубыток + 1760 пп. ставим extern int Prof204 = 12624;//при достижении профита в 12624 пп. extern int SL205=960; //стоп в безубыток + 960 пп. ставим, обманный стоп назад extern int Prof205 = 12746;//при достижении профита в 12746 пп. extern int SL206=18960; //стоп в безубыток + 18960 пп. ставим extern int Prof206 = 23902;//при достижении профита в 23902 пп. extern int SL207=5460; //стоп в безубыток + 5460 пп. ставим, обманный возврат extern int Prof207 = 24102;//при достижении профита в 24102 пп. extern int SL208=24100; //стоп в безубыток + 24100 пп. ставим extern int Prof208 = 36906;//при достижении профита в 36906 пп. extern int SL209=55600; //стоп в безубыток + 55600 пп. ставим extern int Prof209 = 62160;//при достижении профита в 62160 пп. extern string A11_1="========================================"; extern string A12="Комментарий 12-го типа и установки в пунктах"; extern string Comment12="12"; extern int SL300=186; // первоначальный стоп extern int TP300=86220; // тэйкпрофит extern int SL301=6; //стоп в безубыток + 6 пп. ставим extern int Prof301 = 177;//при достижении профита в 177 пп. extern int SL302=105; //стоп в безубыток + 105 пп. ставим extern int Prof302 = 333;//при достижении профита в 333 пп. extern int SL303=207; //стоп в безубыток + 207 пп. ставим extern int Prof303 = 546;//при достижении профита в 546 пп. extern int SL304=303; //стоп в безубыток + 303 пп. ставим extern int Prof304 = 636;//при достижении профита в 636 пп. extern int SL305=429; //стоп в безубыток + 429 пп. ставим extern int Prof305 = 906;//при достижении профита в 906 пп. extern int SL306=540; //стоп в безубыток + 540 пп. ставим extern int Prof306 = 1269;//при достижении профита в 1269 пп. extern int SL307=639; //стоп в безубыток + 639 пп. ставим extern int Prof307 = 1590;//при достижении профита в 1590 пп. extern int SL308=969; //стоп в безубыток + 969 пп. ставим extern int Prof308 = 1806;//при достижении профита в 1806 пп. extern int SL309=1350; //стоп в безубыток + 1350 пп. ставим extern int Prof309 = 2250;//при достижении профита в 2250 пп. extern string A12_1="========================================"; extern string A13="Комментарий 13-го типа и установки в пунктах"; extern string Comment13="13"; extern int SL400=186; // первоначальный стоп extern int TP400=5199; // тэйкпрофит extern int SL401=6; //стоп в безубыток + 6 пп. ставим extern int Prof401 = 180;//при достижении профита в 180 пп. extern int SL402=54; //стоп в безубыток + 54 пп. ставим extern int Prof402 = 249;//при достижении профита в 249 пп. extern int SL403=108; //стоп в безубыток + 108 пп. ставим extern int Prof403 = 303;//при достижении профита в 303 пп. extern int SL404=243; //стоп в безубыток + 243 пп. ставим extern int Prof404 = 429;//при достижении профита в 429 пп. extern int SL405=366; //стоп в безубыток + 366 пп. ставим extern int Prof405 = 699;//при достижении профита в 699 пп. extern int SL406=603; //стоп в безубыток + 603 пп. ставим extern int Prof406 = 969;//при достижении профита в 969 пп. extern int SL407=960; //стоп в безубыток + 960 пп. ставим extern int Prof407 = 1860;//при достижении профита в 1860 пп. extern int SL408=1260; //стоп в безубыток + 1260 пп. ставим extern int Prof408 = 2222;//при достижении профита в 2222 пп. extern int SL409=2490; //стоп в безубыток + 2490 пп. ставим extern int Prof409 = 3399;//при достижении профита в 3399 пп. extern string A13_1="========================================"; extern string A14="Комментарий 14-го типа и установки в пунктах"; extern string Comment14="14"; extern int SL500=186; // первоначальный стоп extern int TP500=3850; // тэйкпрофит extern int SL501=2; //стоп в безубыток + 2 пп. ставим extern int Prof501 = 77;//при достижении профита в 77 пп. extern int SL502=6; //стоп в безубыток + 6 пп. ставим extern int Prof502 = 168;//при достижении профита в 168 пп. extern int SL503=158; //стоп в безубыток + 158 пп. ставим extern int Prof503 = 338;//при достижении профита в 338 пп. extern int SL504=331; //стоп в безубыток + 331 пп. ставим extern int Prof504 = 507;//при достижении профита в 507 пп. extern int SL505=502; //стоп в безубыток + 502 пп. ставим extern int Prof505 = 834;//при достижении профита в 834 пп. extern int SL506=915; //стоп в безубыток + 915 пп. ставим extern int Prof506 = 1336;//при достижении профита в 1336 пп. extern int SL507=1236; //стоп в безубыток + 1260 пп. ставим extern int Prof507 = 2250;//при достижении профита в 2250 пп. extern int SL508=2251; //стоп в безубыток + 2251 пп. ставим extern int Prof508 = 3486;//при достижении профита в 3486 пп. extern int SL509=3485; //стоп в безубыток + 3485 пп. ставим extern int Prof509 = 3570;//при достижении профита в 3570 пп. extern string A14_1="========================================"; extern string A15="Комментарий 15-го типа и установки в пунктах"; extern string Comment15="15"; extern int SL600=186; // первоначальный стоп extern int TP600=3942; // тэйкпрофит extern int SL601=2; //стоп в безубыток + 2 пп. ставим extern int Prof601 = 180;//при достижении профита в 180 пп. extern int SL602=45; //стоп в безубыток + 45 пп. ставим extern int Prof602 = 294;//при достижении профита в 294 пп. extern int SL603=62; //стоп в безубыток + 62 пп. ставим extern int Prof603 = 303;//при достижении профита в 303 пп. extern int SL604=186; //стоп в безубыток + 186 пп. ставим extern int Prof604 = 492;//при достижении профита в 492 пп. extern int SL605=270; //стоп в безубыток + 270 пп. ставим extern int Prof605 = 591;//при достижении профита в 591 пп. extern int SL606=422; //стоп в безубыток + 422 пп. ставим extern int Prof606 = 969;//при достижении профита в 969 пп. extern int SL607=630; //стоп в безубыток + 630 пп. ставим extern int Prof607 = 1241;//при достижении профита в 1241 пп. extern int SL608=990; //стоп в безубыток + 990 пп. ставим extern int Prof608 = 1457;//при достижении профита в 1457 пп. extern int SL609=1969; //стоп в безубыток + 1969 пп. ставим extern int Prof609 = 2247;//при достижении профита в 2247 пп. extern string A15_1="========================================"; extern string A16="Следить за позициями на всех символах"; extern bool AllSymbolsDetect = True; // false только на прикрепленном графике extern string A16_1="========================================"; extern string A17 = "Параметры сервисных сообщений: угол (0-3), цвет, размер шрифта"; extern int CommentCorner = 3; extern color CommentColor = Yellow; extern int CommentFontSize = 12; extern string A18 = "----------------------------------"; int Trail[15, 10, 2]; // первое измерение - номер коммента, // второе измерение - номер ступени (первоначальные стоп и профит //тоже считаются ступенью) // третье измерение: в элементе 0 - стоп, в элементе 1 - профит int ErrorPos[10000]; // Массив номеров тикетов, для которых зафиксирована ошибка int CountPos; // Количество заполненных элементов массива ErrorPos string Comm[15]; bool Activate; double Tick, Spread, StopLevel; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- Activate = False; CountPos = 0; ArrayInitialize(ErrorPos, 0); // - 1 - == Сбор информации об условиях торговли ======================================== Tick = MarketInfo(Symbol(), MODE_TICKSIZE); // минимальный тик Spread = ND(MarketInfo(Symbol(), MODE_SPREAD)*Point); // текущий спрэд StopLevel = ND(MarketInfo(Symbol(), MODE_STOPLEVEL)*Point); // текущий уровень стопов // - 1 - == Окончание блока ============================================================= if (!TrailToArray(Comment1, SL10, TP10, SL11, Prof11, SL12, Prof12, SL13, Prof13, SL14, Prof14, SL15, Prof15, SL16, Prof16, SL17, Prof17, SL18, Prof18, SL19, Prof19, 0) || !TrailToArray(Comment2, SL20, TP20, SL21, Prof21, SL22, Prof22, SL23, Prof23, SL24, Prof24, SL25, Prof25, SL26, Prof26, SL27, Prof27, SL28, Prof28, SL29, Prof29, 1) || !TrailToArray(Comment3, SL30, TP30, SL31, Prof31, SL32, Prof32, SL33, Prof33, SL34, Prof34, SL35, Prof35, SL36, Prof36, SL37, Prof37, SL38, Prof38, SL39, Prof39, 2) || !TrailToArray(Comment4, SL40, TP40, SL41, Prof41, SL42, Prof42, SL43, Prof43, SL44, Prof44, SL45, Prof45, SL46, Prof46, SL47, Prof47, SL48, Prof48, SL49, Prof49, 3) || !TrailToArray(Comment5, SL50, TP50, SL51, Prof51, SL52, Prof52, SL53, Prof53, SL54, Prof54, SL55, Prof55, SL56, Prof56, SL57, Prof57, SL58, Prof58, SL59, Prof59, 4) || !TrailToArray(Comment6, SL60, TP60, SL61, Prof61, SL62, Prof62, SL63, Prof63, SL64, Prof64, SL65, Prof65, SL66, Prof66, SL67, Prof67, SL68, Prof68, SL69, Prof69, 5) || !TrailToArray(Comment7, SL70, TP70, SL71, Prof71, SL72, Prof72, SL73, Prof73, SL74, Prof74, SL75, Prof75, SL76, Prof76, SL77, Prof77, SL76, Prof76, SL77, Prof77, 6) || !TrailToArray(Comment8, SL80, TP80, SL81, Prof81, SL82, Prof82, SL83, Prof83, SL84, Prof84, SL85, Prof85, SL86, Prof86, SL87, Prof87, SL88, Prof88, SL89, Prof89, 7) || !TrailToArray(Comment9, SL90, TP90, SL91, Prof91, SL92, Prof92, SL93, Prof93, SL94, Prof94, SL95, Prof95, SL96, Prof96, SL97, Prof97, SL98, Prof98, SL99, Prof99, 8) || !TrailToArray(Comment10, SL100, TP100, SL101, Prof101, SL102, Prof102, SL103, Prof103, SL104, Prof104, SL105, Prof105, SL106, Prof106, SL107, Prof107,SL108, Prof108, SL109, Prof109, 9) || !TrailToArray(Comment11, SL200, TP200, SL201, Prof201, SL202, Prof202, SL203, Prof203, SL204, Prof204, SL205, Prof205, SL206, Prof206, SL207, Prof207, SL208, Prof208, SL209, Prof209, 10) || !TrailToArray(Comment12, SL300, TP300, SL301, Prof301, SL302, Prof302, SL303, Prof303, SL304, Prof304, SL305, Prof305, SL306, Prof306, SL307, Prof307, SL308, Prof308, SL309, Prof309, 11) || !TrailToArray(Comment13, SL400, TP400, SL401, Prof401, SL402, Prof402, SL403, Prof403, SL404, Prof404, SL405, Prof405, SL406, Prof406, SL407, Prof407, SL408, Prof408, SL409, Prof409, 12) || !TrailToArray(Comment14, SL500, TP500, SL501, Prof501, SL502, Prof502, SL503, Prof503, SL504, Prof504, SL505, Prof505, SL506, Prof506, SL507, Prof507, SL508, Prof508, SL509, Prof509, 13) || !TrailToArray(Comment15, SL600, TP600, SL601, Prof601, SL602, Prof602, SL603, Prof603, SL604, Prof604, SL605, Prof605, SL606, Prof606, SL607, Prof607, SL608, Prof608, SL609, Prof609, 14)) return(0); Activate = True; //---- return(0); } //+-------------------------------------------------------------------------------------+ //| expert deinitialization function | //+-------------------------------------------------------------------------------------+ int deinit() { //---- if (ObjectFind("NewComment2") == 0) ObjectDelete("NewComment2"); //---- return(0); } //+-------------------------------------------------------------------------------------+ //| Проверка правильности значений и занесение в массив | //+-------------------------------------------------------------------------------------+ bool TrailToArray(string A, int SL0, int TP0, int SL1, int TP1, int SL2, int TP2, int SL3, int TP3, int SL4, int TP4, int SL5, int TP5, int SL6, int TP6, int SL7, int TP7, int SL8, int TP8,int SL9, int TP9, int Num) { if (SL0 <= 0) { Comment("Значение SL", Num+1, "0 должно быть больше нуля. Советник отключен!"); Print("Значение SL", Num+1, "0 должно быть больше нуля. Советник отключен!"); return(False); } if (SL1 < 0) { Comment("Значение SL", Num+1, "1 должно быть больше или равно нулю. Советник отключен!"); Print("Значение SL", Num+1, "1 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (SL2 < 0) { Comment("Значение SL", Num+1, "2 должно быть больше или равно нулю. Советник отключен!"); Print("Значение SL", Num+1, "2 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (SL3 < 0) { Comment("Значение SL", Num+1, "3 должно быть больше или равно нулю. Советник отключен!"); Print("Значение SL", Num+1, "3 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (SL4 < 0) { Comment("Значение SL", Num+1, "4 должно быть больше или равно нулю. Советник отключен!"); Print("Значение SL", Num+1, "4 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (SL5 < 0) { Comment("Значение SL", Num+1, "5 должно быть больше или равно нулю. Советник отключен!"); Print("Значение SL", Num+1, "5 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (SL6 < 0) { Comment("Значение SL", Num+1, "6 должно быть больше или равно нулю. Советник отключен!"); Print("Значение SL", Num+1, "6 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (SL7 < 0) { Comment("Значение SL", Num+1, "7 должно быть больше или равно нулю. Советник отключен!"); Print("Значение SL", Num+1, "7 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (SL8 < 0) { Comment("Значение SL", Num+1, "8 должно быть больше или равно нулю. Советник отключен!"); Print("Значение SL", Num+1, "8 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (SL9 < 0) { Comment("Значение SL", Num+1, "9 должно быть больше или равно нулю. Советник отключен!"); Print("Значение SL", Num+1, "9 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (TP0 < 0) { Comment("Значение TP", Num+1, "0 должно быть больше или равно нулю. Советник отключен!"); Print("Значение TP", Num+1, "0 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (TP1 < 0) { Comment("Значение TP", Num+1, "1 должно быть больше или равно нулю. Советник отключен!"); Print("Значение TP", Num+1, "1 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (TP2 < 0) { Comment("Значение TP", Num+1, "2 должно быть больше или равно нулю. Советник отключен!"); Print("Значение TP", Num+1, "2 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (TP3 < 0) { Comment("Значение TP", Num+1, "3 должно быть больше или равно нулю. Советник отключен!"); Print("Значение TP", Num+1, "3 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (TP4 < 0) { Comment("Значение TP", Num+1, "4 должно быть больше или равно нулю. Советник отключен!"); Print("Значение TP", Num+1, "4 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (TP5 < 0) { Comment("Значение TP", Num+1, "5 должно быть больше или равно нулю. Советник отключен!"); Print("Значение TP", Num+1, "5 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (TP6 < 0) { Comment("Значение TP", Num+1, "6 должно быть больше или равно нулю. Советник отключен!"); Print("Значение TP", Num+1, "6 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (TP7 < 0) { Comment("Значение TP", Num+1, "7 должно быть больше или равно нулю. Советник отключен!"); Print("Значение TP", Num+1, "7 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (TP8 < 0) { Comment("Значение TP", Num+1, "8 должно быть больше или равно нулю. Советник отключен!"); Print("Значение TP", Num+1, "8 должно быть больше или равно нулю. Советник отключен!"); return(False); } if (TP9 < 0) { Comment("Значение TP", Num+1, "9 должно быть больше или равно нулю. Советник отключен!"); Print("Значение TP", Num+1, "9 должно быть больше или равно нулю. Советник отключен!"); return(False); } Trail[Num, 0, 0] = SL0; Trail[Num, 1, 0] = SL1; Trail[Num, 2, 0] = SL2; Trail[Num, 3, 0] = SL3; Trail[Num, 4, 0] = SL4; Trail[Num, 5, 0] = SL5; Trail[Num, 6, 0] = SL6; Trail[Num, 7, 0] = SL7; Trail[Num, 8, 0] = SL8; Trail[Num, 9, 0] = SL9; Trail[Num, 0, 1] = TP0; Trail[Num, 1, 1] = TP1; Trail[Num, 2, 1] = TP2; Trail[Num, 3, 1] = TP3; Trail[Num, 4, 1] = TP4; Trail[Num, 5, 1] = TP5; Trail[Num, 6, 1] = TP6; Trail[Num, 7, 1] = TP7; Trail[Num, 8, 1] = TP8; Trail[Num, 9, 1] = TP9; Comm[Num] = A; return(True); } //+-------------------------------------------------------------------------------------+ //| Приведение значений к точности одного пункта | //+-------------------------------------------------------------------------------------+ double ND(double A) { return(NormalizeDouble(A, Digits)); } //+-------------------------------------------------------------------------------------+ //| Приведение значений к точности одного пункта для нужной валютной пары | //+-------------------------------------------------------------------------------------+ double NDS(double A, string Sym) { return(NormalizeDouble(A, MarketInfo(Sym, MODE_DIGITS))); } //+-------------------------------------------------------------------------------------+ //| Вывод комментария в одном из углов | //+-------------------------------------------------------------------------------------+ void NewComment(string S) { if (ObjectFind("NewComment2") == -1) { // Создание объекта if (!ObjectCreate("NewComment2", OBJ_LABEL, 0, 0, 0)) return; ObjectSet("NewComment2", OBJPROP_CORNER, CommentCorner); ObjectSet("NewComment2", OBJPROP_XDISTANCE, 1); ObjectSet("NewComment2", OBJPROP_YDISTANCE, 1); } ObjectSetText("NewComment2", S, CommentFontSize, "Trebushe MS", CommentColor); } //+-------------------------------------------------------------------------------------+ //| Ожидание торгового потока. Если поток свободен, то результат True, иначе - False | //+-------------------------------------------------------------------------------------+ bool WaitForTradeContext() { int P = 0; // цикл "пока" while(IsTradeContextBusy() && P < 5) { P++; Sleep(1000); } // ------------- if(P == 5) return(False); return(True); } //+-------------------------------------------------------------------------------------+ //| Приведение значений к точности одного тика | //+-------------------------------------------------------------------------------------+ double NP(double A) { return(MathRound(A/Tick)*Tick); } //+-------------------------------------------------------------------------------------+ //| Трейлинг-стоп | //+-------------------------------------------------------------------------------------+ void TrailingStop() { // - 1 - ==================== Нахождение своих сделок =================================== for (int i = 0; i < OrdersTotal(); i++) if (OrderSelect(i, SELECT_BY_POS) && OrderType() < 2) if (OrderSymbol() == Symbol() || AllSymbolsDetect) for (int j = 0; j < 15; j++) if (OrderComment() == Comm[j]) // - 1 - ==================== Окончание блока =========================================== // - 2 - ==================== Чтение основных характеристик ============================= { // - 2.1 - ========== Проверка ошибочной позиции ========================== bool Res = False; for (int k = 0; k < CountPos; k++) if (ErrorPos[k] == OrderTicket()) { Res = True; break; } if (Res) break; // - 2.1 - ========== Окончание блока ===================================== double OpPrice = NDS(OrderOpenPrice(), OrderSymbol()); double SL = NDS(OrderStopLoss(), OrderSymbol()); double TP = NDS(OrderTakeProfit(), OrderSymbol()); double NBid = NDS(MarketInfo(OrderSymbol(), MODE_BID), OrderSymbol()); double NAsk = NDS(MarketInfo(OrderSymbol(), MODE_ASK), OrderSymbol()); Tick = MarketInfo(OrderSymbol(), MODE_TICKSIZE); // минимальный тик Spread = NDS(MarketInfo(OrderSymbol(), MODE_SPREAD)* MarketInfo(OrderSymbol(), MODE_POINT), OrderSymbol()); StopLevel = NDS(MarketInfo(OrderSymbol(), MODE_STOPLEVEL)* MarketInfo(OrderSymbol(), MODE_POINT), OrderSymbol()); // текущий уровень стопов // - 2 - ==================== Окончание блока =========================================== if (OrderType() == OP_BUY) { // - 3 - ==================== Установка профита и стопа длинной сделки ================== if (TP == 0 || SL == 0) { double sl = NP(OpPrice-Tick*Trail[j, 0, 0]); if (sl <= 0) { Alert("Стоп для позиции #", OrderTicket(), " выходит меньше нуля!"); ErrorPos[CountPos] = OrderTicket(); CountPos++; break; } double tp = NP(OpPrice+Tick*Trail[j, 0, 1]); if (NBid - sl > StopLevel && tp - NBid > StopLevel) if (WaitForTradeContext()) if (!OrderModify(OrderTicket(), 0, sl, tp, 0)) Print("Ошибка при установке стопа и профита ордеру BUY #", OrderTicket(), ", ошибка №", GetLastError(), ", SL = ", sl, ", TP = ", tp, ", Bid = ", NBid); break; // прерывание цикла j } // - 3 - ==================== Окончание блока =========================================== // - 4 - ========= Проверка необходимости переноса стопа по тралу длинной сделки ======== for (k = 7; k > 0; k--) if (NDS(NBid - OpPrice - Tick*Trail[j, k, 1], OrderSymbol()) >= 0 && OpPrice + Tick*Trail[j, k, 0] - SL >= Tick && NDS(NBid - OpPrice - Tick*Trail[j, k, 0] - StopLevel, OrderSymbol()) > 0) { if (WaitForTradeContext()) if (!OrderModify(OrderTicket(), 0, NP(OpPrice + Tick*Trail[j, k, 0]), OrderTakeProfit(), 0)) Print("Не удалось изменить ордер BUY #", OrderTicket(), ". Ошибка №", GetLastError(), ", Старый: ", SL, ", Новый: ", NP(OpPrice + Tick*Trail[j, k, 0])); break; // прерывание цикла k } break; // прерывание цикла j // - 4 - ==================== Окончание блока =========================================== } if (OrderType() == OP_SELL) { // - 5 - ==================== Установка профита и стопа короткой сделки ================= if (TP == 0 || SL == 0) { sl = NP(OpPrice+Tick*Trail[j, 0, 0]+Spread); tp = NP(OpPrice-Tick*Trail[j, 0, 1]+Spread); if (tp <= 0) { Alert("Профит для позиции #", OrderTicket(), " выходит меньше нуля!"); ErrorPos[CountPos] = OrderTicket(); CountPos++; break; } if (sl - NAsk > StopLevel && NAsk - tp > StopLevel) if (WaitForTradeContext()) if (!OrderModify(OrderTicket(), 0, sl, tp, 0)) Print("Ошибка при установке стопа и профита ордеру SELL #", OrderTicket(), ", ошибка №", GetLastError(), ", SL = ", sl, ", TP = ", tp, ", Ask = ", NAsk); break; // прерывание цикла j } // - 5 - ==================== Окончание блока =========================================== // - 6 - ======== Проверка необходимости переноса стопа по тралу короткой сделки ======== for (k = 7; k > 0; k--) if (NDS(OpPrice - Tick*Trail[j, k, 1] - NAsk + Spread, OrderSymbol()) >= 0 && SL - (OpPrice - Tick*Trail[j, k, 0] + Spread) >= Tick && NDS(OpPrice - Tick*Trail[j, k, 0] + Spread - NAsk - StopLevel, OrderSymbol()) > 0) { if (WaitForTradeContext()) if (!OrderModify(OrderTicket(), 0, NP(OpPrice-Tick*Trail[j,k,0]+Spread), OrderTakeProfit(),0)) Print("Не удалось изменить ордер SELL #", OrderTicket(), ". Ошибка №", GetLastError(), ", Старый: ", SL, ", Новый: ", NP(OpPrice-Tick*Trail[j,k,0]+Spread)); break; // прерывание цикла k } break; // прерывание цикла j // - 6 - ==================== Окончание блока =========================================== } } return; } //+-------------------------------------------------------------------------------------+ //| expert start function | //+-------------------------------------------------------------------------------------+ int start() { //---- if (!Activate) return(0); TrailingStop(); // Вычисление размера залога по отношению к депозиту double Margin = AccountMargin()/AccountBalance()*100; NewComment("В залоге "+DoubleToStr(Margin, 2)+"% от депозита"); //---- return(0); } //+------------------------------------------------------------------+