//SLAVE для версии 5 метатрейдера - анализирует сигналы от мастера (Exporter_SN.ex5) которые приходят к нему через глобальные переменные F3 // - в данной версии отсутствует анализ ордеров закрытых вручную - если вы будете так делать, то целесообразно перезапускать робота // после каждого ручного закрытия #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "4.00 - fresh" #include #include #include #include #include CPositionInfo m_position; CTrade m_trade; CSymbolInfo m_symbol; COrderInfo m_order; //----------------------------------------------------------------------------------------- input string OWNER="зарегистрировано на: КЛИЕНТ__"; //----------------------------------------------------------------------------------------- input string mt="запрещённое направление: 0-BUY / 1-SELL / -1-всё разрешено"; input int COLECO_DIR=-1; input string mj="глубина проверки железных уровней в днях"; input int SUPER_LEVEL_DEPTH_IN_DAYS=70; input string mq="глубина проверки уровней в днях"; input int LEVEL_DEPTH_IN_DAYS=7; input string mh="граничное число пробитий уровня [опасно...надёжно]"; input int LEVEL_MAX_CROSS=10; input string mx="супер надёжный уровень: 1-ДА / 0-НЕТ"; input int STRONG_SAFE_LEVEL_MODE=1; input string ms="использовать эмуляцию средств текущего счёта: 1-ДА / 0-НЕТ"; input int USE_DEPO_EMULATION=0; input string m6="минимальный баланс счета для активации режима (-1 -автоматически)"; input double CRUSER_MIN_ACTIVATE_DEPO=-1; input string m9="режим: 0=запись, 1=торговля, 2=торговля+запись"; input int MWORK=1; input string ma="использовать MAGIC NUMBER: >0-ДА / 0-НЕТ"; input long MAGIC_NUMBER=0; input string m1="показывать переменные чистовика: 1-ДА / 0-НЕТ"; input int DEBUG_MODE=1; input string m5="пипсы максимального отклонения от запрошенной цены создания ордера"; input int SLIPPAGE_IN_PIPS=2; input string m7="локальный час ежедневного останова торгов (-1 -не прерывать торги)"; input int EVERYDAY_STOP_TRADE_HOUR=-1; input string m8="срок действия файла чистовика в днях"; input int EXPIRED=1; input string my="локальный час останова торгов в пятницу (-1 - выкл) [0...24]"; input int FRIDAY_STOP_TRADE_HOUR=-1; input string tl="время: 1- локальное / 0- с сервера"; input int USE_LOCAL_TIME=0; input string m2="Говорить прибыль ордера при его закрытии: 1-ДА / 0-НЕТ"; input string mb="2-Также говорить открытую прибыль"; input string mc="3-Также говорить свободную маржу и открытую прибыль"; input string m3="( необходим запуск на чём угодно )"; input int SPEECH_MODE=1; static bool USE_TR_STP_FIRST, no_worked, Agree, Agree2, MGE, MG_SURE_CLOSE, PENDING_OFF, MG_DOUBLE_DEFENCE, SAFE, equ2, NR, NR0, NR_prev, NRC0, NRC_prev, PRIZE, BARRY, MGE0, BARRY0, five, ZARID, MAXPLANC[500], abandon, SOC=false; static string s2, s3, VAR_NAME[], s5; static int Direction[500], ON_PRO, MG_DEPTH, CRU_SAFE_AREA_IN_PIPS, Digits_now, BI_DIRECTIONAL, INDEPENDENT; static int DIGITS_OF_LOT, TRAILING_STOP_FIRST, TRAILING_STOP, MAXIMUM_ORDERS, MOI2, MOI3, liver, LOT_SIZE_IN_PERCENT, CRUSER_MAX_LOT_ZOOM, LAST_LOST[500]; static double TCZ, CRUSER_MIN_DEPO, CRUSER_LOT_INCREASE, askprev, bidprev, Zalog_Total, Balance, Free_Margin, Free_Margin_Real, Balance_Real, Free_Margin0, TVL, MMR, MMR0, minl, maxl, MLST, hand_point, Lot_Size_up, Lot_Size_dn, PRICE_CONTROL, MINIMUM_MARGIN, STATUS[500], STOP_OUT=100; static double Zalog_Total_prev, Balance_prev, Balance_Real_prev, Profit_ALL_prev, Profit_ALL0, FMZ; static datetime PL_UP, PL_DN, TEST_SECOND0, ORANGE_TIME, SP_TIMER; static int TRADE_SHIFT_REV, TR_STP_1ST_SPREAD, BLL, TR_STP_1ST_SPREAD0, TRADE_SHIFT_REV0, BLL0, TRADE_SHIFT_REV2; static int q1, q2, q3, q4, c0, c1, c2, ets, CRAZY, NO_MASTER, CRAZY0, NO_MASTER0; static int mode30, mode35; static int MAXIMUM_ORDERS0, TRAILING_STOP_FIRST0, TRAILING_STOP0, LOT_SIZE_IN_PERCENT0, MG_DEPTH0; static int t_z0, OCLA, HBR; static double MINIMUM_MARGIN0, FBM; static int MAX_LOSS, ND; static int MAX_POINT, CHECK_SECOND, CHECK_LAG, CHECK_LAG0; static int LIVES_UP, LIVES_DN; static int VSL[500], TOO_FIX[999], TOO_FIX2[999], VSL2[500], O[500], OCA[500], bytesread[1], lo[1], IOS, allo0, C[500]; static datetime EXPO[500], EXPO2[500]; static double BORDER[500]; static double BORDER2[500], WEAPON_RANGE, CRUSER_TOLERANCE, REGENERATION_RANGE, VIRTUAL_BALANCE, FE, CRYTICAL_WALL; static double DAT[]; static int RID[48]={1776620,355328,1066020,6395832,1243648,1421360,2487310,2664930,2842592,3020288,6040780,5862846,5685248,6573790,3908630,5329860,5152198,4796928,4974760,4619212,4441600,4264080,4086295,3730902,3375578,3197952,2309710,1954282,1598976,1421360,1243655,888310,6218170,5507584,8705830,2131944,8527872,6218450,6751270,6928818,7106480,7284224,7639810,7817128,8350208,8172820}; int OnInit() {int q, j, z, r=0, exf, j0, crc0, de, Export_file2, qCR, j0CR, tck, t_attempts, t_handler, fread, v, v2, v3, on3; string ASCII[4], file_of_lag, st, file_CR; bool ORIGIN, CR_READ=false, DELETE_PENDINGS_ORDERS; double var, ASK_DATA[12], ask1, lh[5], qwa; datetime ttl, xl, TEST_SECOND; MqlDateTime stru; if (MAGIC_NUMBER>0) s5=DoubleToString(MAGIC_NUMBER,0)+"_"; else s5=""; ArrayInitialize(ASK_DATA, 0); ArrayInitialize(O, 0); if (StringSubstr(s2,3,3)=="ZAR") {ZARID=true; Print ("по причине активности ZAR глубина проверки железных уровней в днях /=4 ==>"+DoubleToString(SUPER_LEVEL_DEPTH_IN_DAYS/4,0));} else ZARID=false; Free_Margin_Real=0; st="TRADE_START_SOUND"; GlobalVariableSet(st,0); ets=0; st="____ENABLE TRADE SOUNDS"; GlobalVariableSet(st,ets); z=300; r=-1; while (r<61 && z>0) {r=ArrayResize(DAT,61); z--;} ArrayInitialize(DAT, -1000); no_worked=false; ORIGIN=false; ttl=TimeLocal()+15; s2=""; while (s2=="" && TimeLocal()0) { var=iLow(s2,PERIOD_D1,t_attempts); ask1=iHigh(s2,PERIOD_D1,t_attempts); tck--; Sleep (3);} st=s5+"____"+s2+"____Only Close Profit Orders Mode Enabled"; if (!GlobalVariableCheck(st)) GlobalVariableSet(st,0); NO_MASTER=0; GlobalVariableSet(s5+"____"+s2+"____SHOW_ME_BALANCE (1-Yes/0-No)",0); GlobalVariableSet(s5+"____"+s2+"____CLOSE_ALL_PROFIT_ORDERS_(111-Yes)",0); GlobalVariableSet(s5+"____"+s2+"==========================================================================================================================",999666999999666669999966666999999666999); z=StringLen(s2); if (z>6) s3=StringSubstr(s2, 0, 6); else s3=s2; CHECK_SECOND=no_worked; if (MWORK!=0) { Sleep(5); z=100; q=-1; while (q==-1 && z>0) {q=FileOpen("q_result_"+s3+".lag", FILE_BIN|FILE_READ); z--; Sleep(1);} if (q!=-1) { z=200; j0=-1; while (j0!=60 && z>0) {j0=FileReadArray(q, DAT, 1, 60); z--;} if (FileSize(q)>480) TEST_SECOND=FileReadInteger(q, INT_VALUE); else TEST_SECOND=0; TEST_SECOND0=TEST_SECOND; FileClose(q); z=DAT[42]; if (z==11 || z==12) DELETE_PENDINGS_ORDERS=false; else DELETE_PENDINGS_ORDERS=true; DAT[42]=DELETE_PENDINGS_ORDERS; Print ("проверка баланса (пока нет данных)..."); ask1=SymbolInfoDouble(s2,SYMBOL_ASK); var=0; while (var<1 && ask1==SymbolInfoDouble(s2,SYMBOL_ASK)) {var=AccountInfoDouble(ACCOUNT_BALANCE); Sleep (5);} if (var<1) { Print ("текущий баланс счёта="+DoubleToString(var,2)+", останов..."); if (MWORK==1) SetNoWork(); else no_worked=true; return(INIT_SUCCEEDED);} else Print ("текущий баланс="+DoubleToString(var,2)); qwa=var; if (j0==60) { VIRTUAL_BALANCE=DAT[57]; FMZ=4; ASK_DATA[10]=1; INDEPENDENT=6; OCLA=2; file_CR="q_CRAZY_"+s3+".lag"; qCR=FileOpen(file_CR, FILE_BIN|FILE_READ); if (qCR!=-1) { z=100; fread=11; j0CR=-1; while (j0CR0 && fread>7) { if (j0CR!=-1) qCR=FileOpen(file_CR, FILE_BIN|FILE_READ); if (qCR!=-1) {j0CR=FileReadArray(qCR, ASK_DATA, 1, 11); z--; if (z<80 && fread>7) {fread--; z=100;} else Sleep (10); FileClose(qCR);}} FileClose(qCR); Print ("Фактически удалось прочесть (q_CRAZY)=",j0CR); WEAPON_RANGE=ASK_DATA[1]; CRUSER_TOLERANCE=ASK_DATA[2]; REGENERATION_RANGE=ASK_DATA[3]; if (ASK_DATA[4]<0) {SOC=true; ASK_DATA[4]=MathAbs(ASK_DATA[4]);} BARRY=ASK_DATA[5]; MINIMUM_MARGIN=ASK_DATA[6]; if (j0CR>7) {OCLA=ASK_DATA[7]; if (OCLA<0) {NO_MASTER=false; OCLA=-OCLA;} else NO_MASTER=true;} if (j0CR>8) FMZ=ASK_DATA[8]; if (j0CR>9) INDEPENDENT=ASK_DATA[9]; else if (j0CR==9) INDEPENDENT=6; CRAZY=ASK_DATA[10]; if (j0CR>10) STOP_OUT=ASK_DATA[11]; if (MINIMUM_MARGIN==0) MINIMUM_MARGIN=VIRTUAL_BALANCE*0.16; if (ASK_DATA[1]*ASK_DATA[2]*ASK_DATA[3]*ASK_DATA[4]>0) CR_READ=true;} if (!CR_READ) {WEAPON_RANGE=0.7; CRUSER_TOLERANCE=0.1; REGENERATION_RANGE=0.1; VIRTUAL_BALANCE=var*0.3; BARRY=false; INDEPENDENT=6; MINIMUM_MARGIN=VIRTUAL_BALANCE*0.16; CRAZY=1; OCLA=2;} if (FMZ<=0) FMZ=0.5; mode30=DAT[30]; DAT[30]=-1; mode35=DAT[35]; DAT[35]=-1; qCR=j0; Print ("найден Чистовик (Found Origin)"); if (TEST_SECOND>0) {xl=ttl-15; TimeToStruct(xl,stru); r=stru.day_of_week; if (r!=6 && r!=0) {tck=0; while (xl>TEST_SECOND) {xl-=3600; TimeToStruct(xl,stru); z=stru.day_of_week; if (z==6 || z==0) tck+=3600;} TEST_SECOND0+=tck;} Print ("дата создания чистовика тестером: "+TimeToString(TEST_SECOND,TIME_DATE|TIME_MINUTES|TIME_SECONDS));} if (CHECK_SECOND==0) {z=-1; j0=CHECK_SECOND;} else {z=0; j0=Zalog_Total;} PL_UP=z; PL_DN=z; r=30; while ((!TerminalInfoInteger(TERMINAL_CONNECTED) && j0==0) || r>0) {if (TerminalInfoInteger(TERMINAL_CONNECTED)) {j0=AccountInfoInteger(ACCOUNT_LOGIN); r--;}} v=RID[43]; v2=RID[0]; if (v>v2) {v3=v2; v2=v; v=v3;} q4=v-100; while (v0) {r=ArrayResize(VAR_NAME, 48); z--;} VAR_NAME[RID[11]]="WAITING TIME IN SECONDS [0...>]"; VAR_NAME[RID[14]]="MG DEPTH IN DEPOSIT"; VAR_NAME[RID[33]]="MAXIMUM OF ORDERS"; VAR_NAME[RID[15]]="SAFE (Сейф) [0/1]"; VAR_NAME[RID[16]]="TRADE SHIFT 2 [1...>]"; VAR_NAME[RID[17]]="TRAILING STOP FIRST [1...>]"; VAR_NAME[RID[18]]="TRAILING STOP [1...>]"; VAR_NAME[RID[10]]="ONE DAY SHIFT [1...>]"; VAR_NAME[RID[19]]="ORDER LIFE [0-Disabled, 1...>]"; VAR_NAME[RID[20]]="ONE DAY LIFE [0-Disabled, 1...>]"; VAR_NAME[RID[21]]="IMPULSE SHIFT 2 [1...>]"; VAR_NAME[RID[22]]="RISE PIPS [2...>]"; VAR_NAME[RID[12]]="RISE PIPS OLD [2...>]"; VAR_NAME[RID[25]]="TRADE SHIFT [1...>]"; VAR_NAME[RID[37]]="ENABLE UNLIMITED MG-ORDERS [0/1]"; VAR_NAME[1]="CLOSING ATTEMPTS [1...10]"; VAR_NAME[RID[1]]="IMPULSE LIFE [0-Disabled, 1...>]"; VAR_NAME[3]="IMPULSE SHIFT [0...>]"; VAR_NAME[4]="TRAIL SUBMODE [1...7]"; VAR_NAME[RID[31]]="TRAILING PIPS [1...>]"; VAR_NAME[RID[2]]="CHANNEL FRESH [1...>]"; VAR_NAME[RID[3]]="CRUSER MIN DEPO [1...>]"; VAR_NAME[RID[13]]="TRADE CONTROL ZOOM [0-Disabled, 0...>]"; VAR_NAME[RID[5]]="CRUSER LOT INCREASE"; VAR_NAME[RID[4]]="CRUSER MAX LOT ZOOM [1...>]"; VAR_NAME[RID[28]]="CRUSER SAFE AREA IN PIPS [1...>]"; VAR_NAME[RID[27]]="MG Engine [0/1]"; VAR_NAME[RID[35]]="MAXIMAL SIZE OF LOT"; VAR_NAME[RID[26]]="IMPULSE [1..45]"; VAR_NAME[RID[6]]="(PRC)CANDLE WAITING [0-Disabled, 1...7200]"; VAR_NAME[20]="MAX TPS [0-Disabled, 1...>]"; VAR_NAME[RID[23]]="DIGITS"; VAR_NAME[RID[8]]="ACCOUNT LIVERAGE"; VAR_NAME[RID[9]]="USE FIVE DIGITS [0/1]"; VAR_NAME[RID[0]]="ACCOUNT TICKVALUE"; VAR_NAME[RID[7]]="ACCOUNT LOTSTEP"; VAR_NAME[RID[24]]="SPREAD ON YOUR TRADE TERMINAL (0-AUTO)"; VAR_NAME[RID[38]]="ONE DAY SHIFT 2 [1...>]"; VAR_NAME[RID[39]]="ORDER LIFE 2 [0-Disabled, 1...>]"; VAR_NAME[RID[40]]="MAX LOSS IN DEPOSIT [1...>]"; VAR_NAME[RID[41]]="(PRC) SUBMODE [1...7]"; VAR_NAME[42]="RECHECK DIRECTION AFTER WAITING [0/1]"; VAR_NAME[RID[42]]="LOT SIZE IN PERCENT"; VAR_NAME[RID[43]]="ANALIZE TICK 2 [3...>]"; VAR_NAME[45]="ONE DAY LIFE 2"; VAR_NAME[RID[45]]="MG TRADE ALLOW (MIX TRADE) [0/1]"; VAR_NAME[RID[44]]="USE TRAILING STOP FIRST [0/1]"; if (DAT[27]>DAT[28]) { de=DAT[28]; DAT[28]=DAT[27]; DAT[27]=de;} Print (""); Agree=ORIGIN; Agree2=true; tck=100; var=0; while (var<=0 && tck>0) {var=SymbolInfoDouble(s2, SYMBOL_TRADE_TICK_VALUE); tck--;} if (TVL!=var && var>0) {Print ("несовпадение по рынку: MODE_TICKVALUE="+DoubleToString(TVL,8)+" (из тестера)"); TVL=var; Print ("но теперь MODE_TICKVALUE="+DoubleToString(TVL,8));} if (var<=0) Print ("Внимание!, MODE_TICKVALUE=0"); abandon=false; tck=100; var=0; while (var<=0 && tck>0) {var=SymbolInfoDouble(s2, SYMBOL_MARGIN_INITIAL); tck--;} if (MMR0!=var && var>0) { Print ("несовпадение по рынку: MODE_MARGINREQUIRED=",var); Print ("MMR неправильная:"+DoubleToString(var,5)+"(с текущего счёта) !="+DoubleToString(MMR0,5)+"(с тестера)"); Print ("но теперь MMR="+DoubleToString(var,5)); MMR=var;} else if (var<=0) {Print ("MODE_MARGINREQUIRED теперь ==>"+DoubleToString(MMR0,5)); MMR=MMR0; abandon=true;} tck=100; var=0; while (var<=0 && tck>0) {var=AccountInfoInteger(ACCOUNT_LEVERAGE); tck--;} if (liver!=var && var>0) {Print ("несовпадение по рынку: AccountLeverage=",var); liver=var;} if (var<=0) {Print ("AccountLeverage=0 - робот работать не будет"); if (MWORK==1) {SetNoWork(); return(INIT_SUCCEEDED);} else no_worked=true;} tck=100; var=0; while (var<=0 && tck>0) {var=SymbolInfoDouble(s2, SYMBOL_VOLUME_STEP); tck--;} if (MLST!=var && var>0) {Print ("несовпадение по рынку: MODE_LOTSTEP=",var); MLST=var;} if (var<=0) {Print ("MODE_LOTSTEP=0 - робот работать не будет"); if (MWORK==1) {SetNoWork(); return(INIT_SUCCEEDED);} else no_worked=true;} tck=100; var=0; while (var<=0 && tck>0) {var=SymbolInfoDouble(s2, SYMBOL_VOLUME_MIN); tck--;} if (minl!=var && var>0) {Print ("несовпадение по рынку: MODE_MINLOT=",var); minl=var;} if (var<=0) {Print ("MODE_MINLOT=0 - робот работать не будет"); if (MWORK==1) {SetNoWork(); return(INIT_SUCCEEDED);} else no_worked=true;} tck=100; var=0; while (var<=0 && tck>0) {var=SymbolInfoDouble(s2, SYMBOL_VOLUME_MAX); tck--;} if (maxl!=var && var>0) {Print ("несовпадение по рынку: MODE_MAXLOT=",var); if (var>minl) maxl=var; else var=0;} if (var<=0) {maxl=minl*1000; Print ("MODE_MAXLOT теперь ==>"+DoubleToString(maxl,5));} tck=100; Digits_now=0; while (Digits_now<=0 && tck>0) {Digits_now=SymbolInfoInteger(s2, SYMBOL_DIGITS); tck--;} if (ND!=Digits_now && Digits_now>0) Print ("несовпадение по рынку: Digits=",Digits_now); if (Digits_now<=0) {Print ("Digits=0 - робот работать не будет"); if (MWORK==1) {SetNoWork(); return(INIT_SUCCEEDED);} else no_worked=true;} if (DEBUG_MODE==1 && !no_worked) { Print ("IMPULSE WAIT [0...20]=",DAT[58]); for (z=1; z<48; z++) { st=VAR_NAME[z]; Print (st+"=",DAT[z]); if (GlobalVariableCheck("___"+st)) GlobalVariableDel ("___"+st);} if (GlobalVariableCheck("____Ok")) GlobalVariableDel("____Ok");} if (minl==0) minl=0.01; if (maxl==0) maxl=100; askprev=SymbolInfoDouble(s2,SYMBOL_ASK); bidprev=SymbolInfoDouble(s2,SYMBOL_BID); Zalog_Total=0; NR=!Agree2; MOI2=1; MOI3=1; LIVES_UP=MAX_POINT; LIVES_DN=MAX_POINT; ArrayInitialize(Direction, -1); ArrayInitialize(VSL,0); ArrayInitialize(EXPO,0); ArrayInitialize(EXPO2,0); ArrayInitialize(TOO_FIX,0); ArrayInitialize(TOO_FIX2,0); ArrayInitialize(STATUS,-1); hand_point=_Point; if (hand_point==0) hand_point=SymbolInfoDouble(s2, SYMBOL_POINT); if (hand_point==0) hand_point=1/MathPow(10,Digits_now); for (j=0; j<6; j++) if (NormalizeDouble(MLST, j)==MLST) {DIGITS_OF_LOT=j; if (j!=5) break;}} if (MWORK!=1) { file_of_lag=CharToString(92)+"Saver"+CharToString(92); q1=-1; j0=250; while (q1==-1 && j0>0) {q1=FileOpen(file_of_lag+s3+".ASK",FILE_BIN|FILE_READ|FILE_WRITE); j0--;} q2=-1; j0=250; while (q2==-1 && j0>0) {q2=FileOpen(file_of_lag+s3+".BID",FILE_BIN|FILE_READ|FILE_WRITE); j0--;} q3=-1; j0=250; while (q3==-1 && j0>0) {q3=FileOpen(file_of_lag+s3+".DAT",FILE_BIN|FILE_READ|FILE_WRITE); j0--;} if (q1*q2*q3<0) { Print ("Не получилось открыть файлы для записи тиков"); Agree=false; Agree2=false; Print ("ОСТАНОВИТЕ РАБОТУ СОВЕТНИКА!");} else Print("Началась запись тиков");} Print (""); NR0=false; NRC0=false; PRIZE=false; Print (""); Print ("STOP OUT SALVATION [0...100]="+DoubleToString(FMZ,2)); Print ("BARYSCHPOLCE MODE [0/1]=",BARRY); Print ("TRAILING SPREAD=",TR_STP_1ST_SPREAD); Print ("CRAZY MODE [0/1]=",CRAZY); Print ("WEAPON RANGE=",WEAPON_RANGE); Print ("CRUSER TOLERANCE=",CRUSER_TOLERANCE); Print ("REGENERATION RANGE=",REGENERATION_RANGE); Print ("START DEPOSIT VIRTUAL=",VIRTUAL_BALANCE); Print ("RECHECK DIRECTION AFTER WAITING [0/1]=",DELETE_PENDINGS_ORDERS); Print ("START DEPOSIT REAL=",ASK_DATA[4]); Print ("MINIMUM OF MARGIN(Creation Orange Stripes)=",MINIMUM_MARGIN); Print ("TRADE W/O MASTER [0/1]=",NO_MASTER); Print ("MMR из тестера="+DoubleToString(MMR0,2)); Print ("MMR текущая="+DoubleToString(MMR,2)); Print ("DIGITS OF LOT="+DoubleToString(DIGITS_OF_LOT,0)); if (!CR_READ) Print ("Значения по умолчанию:"); else Print ("Значения из файла <"+file_CR+"> :"); CR_READ=false; allo0=0; Balance=VIRTUAL_BALANCE; if (crc0!=1160) { Alert("Данная версия программы не предназначена для работы на этом счёте"); Alert("теперь автор не гарантирует корректную работу!"); Alert("возможная причина: вы захотели изменить параметры - в этом случае вам нужно просто перезапустить робота"); SetNoWork(); Agree=PENDING_OFF; NR=!PENDING_OFF; GlobalVariableSet(s5+"____"+s2+"____I_NEED_TO_REMOVE_RECEIVER_SN.ex4_(1-YES/0-NO)",1);} else {GlobalVariableSet(s5+"z_"+s3+"_txt",-1); GlobalVariableSet(s5+"z_"+s3+"_ans",-1); GlobalVariableSet(s5+"z_"+s3+"_crc",-1); Print (""); Print("эта версия v.3.11 SN (приёмник сигналов) успешно прошла проверку на оплаченный торговый счёт"); Print("P.S.: при попытке рекомпиляции и торговле на другом счёте, автор не гарантирует корректную работу!"); st=s5+"____"+s2+"____MG Mode Enabled"; GlobalVariableSet(st,MGE); GlobalVariableSet(s5+"____"+s2+"____I_NEED_TO_REMOVE_RECEIVER_SN.ex4_(1-YES/0-NO)",0); c2=PositionsTotal(); if (c2>0) {t_attempts=20; t_handler=-1; while (t_handler==-1 && t_attempts>0) {t_handler=FileOpen(s2+s5+".mls", FILE_BIN|FILE_READ); t_attempts--;} if (t_handler!=-1) { FileReadArray (t_handler, LAST_LOST, 0, 500); FileClose(t_handler);} t_attempts=20; t_handler=-1; while (t_handler==-1 && t_attempts>0) {t_handler=FileOpen(s3+s5+".bal", FILE_BIN|FILE_READ); t_attempts--;} if (t_handler!=-1) { FileReadArray (t_handler, lh, 0, 4); FileClose(t_handler); if (lh[3]>Balance_Real) Balance=VIRTUAL_BALANCE; else Balance=lh[3];} Profit_ALL0=0; if (MMR>0) { for (z=0; z0 && PositionGetString(POSITION_SYMBOL)==s2){ allo0++; VSL2[z]=Point_DBL_to_INT(NormalizeDouble(askprev-bidprev,Digits_now)); ask1=PositionGetDouble(POSITION_VOLUME); STATUS[z]=MMR*ask1; Zalog_Total+=STATUS[z]; if (PositionGetInteger(POSITION_TYPE)==1) var=PositionGetDouble(POSITION_PRICE_OPEN)-askprev; else var=bidprev-PositionGetDouble(POSITION_PRICE_OPEN); de=Point_DBL_to_INT(NormalizeDouble(var,Digits_now)); if (de!=0) Profit_ALL0+=((TVL*ask1*de)+PositionGetDouble(POSITION_SWAP)); if (LOT_SIZE_IN_PERCENT>0) EXPO[z]=TimeLocal()+LOT_SIZE_IN_PERCENT; EXPO2[z]=TimeLocal()+TRADE_SHIFT_REV;}} var=Zalog_Total-Profit_ALL0; if (USE_DEPO_EMULATION==0) Free_Margin_Real=AccountInfoDouble(ACCOUNT_MARGIN_FREE); else Free_Margin_Real=Balance_Real-var; Free_Margin=Balance-var;} if (allo0>0) { t_attempts=20; t_handler=-1; while (t_handler==-1 && t_attempts>0) {t_handler=FileOpen(s3+s5+".bal", FILE_BIN|FILE_READ); t_attempts--;}} else t_handler=-1; if (t_handler!=-1) { if (FileSize(t_handler)==32) CR_READ=true; FileReadArray (t_handler, lh, 0, 4); FileClose(t_handler); c1=lh[1]; PRIZE=c1; if (MMR==0) Zalog_Total=lh[2]; if (lh[3]>Balance_Real) Balance=Balance_Real*0.3; else Balance=lh[3]; Print ("были выделены дополнительные средства [0/1]=",c1); Print ("активная маржа (залог)=",Zalog_Total); Print ("было восстановление предыдущее состояние счёта:"); Print ("");}} else { ArrayInitialize(LAST_LOST,-1); t_attempts=15; t_handler=-1; while (t_handler==-1 && t_attempts>0) {t_handler=FileOpen(s2+s5+".mls", FILE_BIN|FILE_READ); t_attempts--;} if (t_handler!=-1) {FileClose(t_handler); FileDelete(s2+s5+".mls");}}} if (Free_Margin_Real==0) { Free_Margin=VIRTUAL_BALANCE; if (USE_DEPO_EMULATION==0) Free_Margin_Real=AccountInfoDouble(ACCOUNT_MARGIN_FREE); else Free_Margin_Real=Balance_Real;} if (!CR_READ && crc0==1160) { Balance=VIRTUAL_BALANCE; Print ("Не удалось восстановить предыдущее состояние счёта");} Print ("виртуальный баланс текущего счёта теперь составляет= < * * * ",Balance," * * * >"); Print ("свободная маржа реальная=",Free_Margin_Real); Print ("свободная маржа виртуальная=",Free_Margin); if (qwa<=ASK_DATA[4]+10 && crc0==1160 && (PRICE_CONTROL>100 || (PRICE_CONTROL+CRUSER_LOT_INCREASE*CRUSER_MAX_LOT_ZOOM>100 && CRUSER_MIN_DEPO>0))) { Print ("по этой причине были воспроизведены 2 гудка"); Print ("ВНИМАНИЕ!, обнаружен большой лот, для безопасности необходимо закрыть параллельные торги на этом счёте!"); for (c1=0; c1<2; c1++) {PlaySound("alert.wav"); if (c1<2) Sleep (1300);}} NR_prev=NR; NRC_prev=Agree2; c1=0; c2=0; ORANGE_TIME=0; SP_TIMER=0; ON_PRO=1; MAXIMUM_ORDERS0=MAXIMUM_ORDERS; MINIMUM_MARGIN0=MINIMUM_MARGIN; TRAILING_STOP_FIRST0=TRAILING_STOP_FIRST; TRAILING_STOP0=TRAILING_STOP; LOT_SIZE_IN_PERCENT0=LOT_SIZE_IN_PERCENT; MG_DEPTH0=MG_DEPTH; TR_STP_1ST_SPREAD0=TR_STP_1ST_SPREAD; TRADE_SHIFT_REV0=TRADE_SHIFT_REV; TRADE_SHIFT_REV2=TRADE_SHIFT_REV; CRAZY0=CRAZY; MGE0=MGE; NO_MASTER0=NO_MASTER; BLL0=BLL; CHECK_LAG0=CHECK_LAG; BARRY0=BARRY; t_z0=allo0; st=s5+"____"+s2+"____CRAZY Mode Enabled"; if (!GlobalVariableCheck(st) || allo0==0) GlobalVariableSet(st,CRAZY); st=s5+"____"+s2+"____START TRADE W/O MASTER (1-Yes/0-No)"; if (!GlobalVariableCheck(st) || allo0==0) GlobalVariableSet(st,NO_MASTER); st=s5+"____"+s2+"____TRAILING PIPS [1...>]"; if (!GlobalVariableCheck(st)) GlobalVariableSet(st,MAXIMUM_ORDERS); st=s5+"____"+s2+"____MINIMUM OF MARGIN(Creation Orange Stripes)"; if (!GlobalVariableCheck(st)) GlobalVariableSet(st,MINIMUM_MARGIN); st=s5+"____"+s2+"____TRAILING STOP FIRST"; if (!GlobalVariableCheck(st)) GlobalVariableSet(st,TRAILING_STOP_FIRST); st=s5+"____"+s2+"____TRAILING STOP"; if (!GlobalVariableCheck(st)) GlobalVariableSet(st,TRAILING_STOP); st=s5+"____"+s2+"____(PRC)CANDLE WAITING [0-Disabled, 1...7200]"; if (!GlobalVariableCheck(st)) GlobalVariableSet(st,LOT_SIZE_IN_PERCENT); st=s5+"____"+s2+"____MG DEPTH IN DEPOSIT"; if (!GlobalVariableCheck(st)) GlobalVariableSet(st,MG_DEPTH); st=s5+"____"+s2+"____TRAILING SPREAD"; if (!GlobalVariableCheck(st)) GlobalVariableSet(st,TR_STP_1ST_SPREAD); st=s5+"____"+s2+"____WAITING TIME IN SECONDS [0...>]"; if (!GlobalVariableCheck(st)) GlobalVariableSet(st,TRADE_SHIFT_REV); st=s5+"____"+s2+"____MAXIMUM ORDERS [1...>]"; if (!GlobalVariableCheck(st)) GlobalVariableSet(st,BLL); st=s5+"____"+s2+"____MAX LOSS IN DEPOSIT [1...>]"; if (!GlobalVariableCheck(st) && crc0==1160) {GlobalVariableSet(st,999999); Sleep (1500); Alert ("переменная "+st+" установлена в 99999 по причине защиты от моментального слива депозита"); Alert ("на самом деле она равняется "+DoubleToString(CHECK_LAG,2));} st=s5+"____"+s2+"____BARYSCHPOLCE MODE [0/1]"; if (!GlobalVariableCheck(st)) GlobalVariableSet(st,BARRY); if (liver>600) tck=600; else tck=liver; CRYTICAL_WALL=1100-(tck+tck)-(tck/100)+150; if (CRYTICAL_WALL<1) CRYTICAL_WALL=1; return(INIT_SUCCEEDED);} void OnDeinit(const int reason) {if (NR) return; if (MWORK!=1) {FileClose(q1); FileClose(q2); FileClose(q3);}} void OnTick() {double Lot_add_up, Lot_add_dn, DepoMin, Profit_ALL, LG, LG0, ask0, bid0, order_SL, CW, zoom, Profit_Now, W, W_P, Lot_Size_up0, Lot_Size_dn0, MMM[999], OOP_for_try, cr_otp, VOLUME, vol_c, MH, SS, lh[5]; int MMM2[999], LOSS, xe, cmd, t_z, t_z1, DI, t, ii, WWW, U, L, i, ot, order_pips, lp, now_spread, try, Treasure, now_ticket, sp_try; int allo, t_attempts, t_handler, zt, bt, PLE, SAS; int ON_PRO2, BEST_SELL, lc, LOSS2, t_z2; bool what, res_try, too_lose, need_close, OS, SAFE_ID, need_speak, MG_NOW_CREATE, CRC, U1, result, ferrum, ferrum2, out, equ, ORS; datetime THE_DATETIME; string tst1, tst2, tst3; int Export_file; ulong PM; MqlTradeRequest request0; MqlTradeResult answer0; MqlDateTime stru0; tst1=s5+"____"+s2+"____I_NEED_TO_REMOVE_RECEIVER_SN.ex4_(1-YES/0-NO)"; if (!GlobalVariableCheck(tst1)) GlobalVariableSet(tst1,c1); else c1=GlobalVariableGet(tst1); if (c1==1) { NR=true; if (!NR0) Print ("только теперь вы можете удалить Receiver_SN с графика"); NR0=true;} else { NR=false; if (!NR0) Print ("Receiver_SN сейчас активен на графике"); NR0=true;} if (NR!=NR_prev) NR0=false; NR_prev=NR; if (NR) return; tst1=s5+"____"+s2+"____Only Close Profit Orders Mode Enabled"; if (!GlobalVariableCheck(tst1)) GlobalVariableSet(tst1,c2); if (GlobalVariableGet(tst1)==1) { Agree2=false; if (!NRC0) Print ("сейчас Receiver_SN только закрывает ордера (по прибыли или по максимальной просадке) на графике"); NRC0=true; c2=1;} else { Agree2=true; if (!NRC0) Print ("сейчас Receiver_SN работает в нормальном режиме (создание и закрытие ордеров) на графике"); NRC0=true; c2=0;} if (Agree2!=NRC_prev) NRC0=false; NRC_prev=Agree2; tst1=s5+"____"+s2+"____MG Mode Enabled"; if (!GlobalVariableCheck(tst1)) GlobalVariableSet(tst1,MGE0); MGE=GlobalVariableGet(tst1); tst1="____ENABLE TRADE SOUNDS"; if (!GlobalVariableCheck(tst1)) GlobalVariableSet(tst1,ets); else ets=GlobalVariableGet(tst1); tst1="TRADE_START_SOUND"; if (!GlobalVariableCheck(tst1)) GlobalVariableSet(tst1,0); tst1=s5+"____"+s2+"____MAX LOSS IN DEPOSIT [1...>]"; if (GlobalVariableCheck(tst1)) CHECK_LAG=GlobalVariableGet(tst1); else {GlobalVariableSet(tst1,CHECK_LAG0); CHECK_LAG=CHECK_LAG0;} tst1=s5+"____"+s2+"____BARYSCHPOLCE MODE [0/1]"; if (GlobalVariableCheck(tst1)) BARRY=GlobalVariableGet(tst1); else {GlobalVariableSet(tst1,BARRY0); BARRY=BARRY0;} tst1=s5+"____"+s2+"____CRAZY Mode Enabled"; if (GlobalVariableCheck(tst1)) CRAZY=GlobalVariableGet(tst1); else {GlobalVariableSet(tst1,CRAZY0); CRAZY=CRAZY0;} tst1=s5+"____"+s2+"____MAXIMUM ORDERS [1...>]"; if (!GlobalVariableCheck(tst1)) {GlobalVariableSet(tst1,BLL0); BLL=BLL0;} else BLL=GlobalVariableGet(tst1); tst1=s5+"____"+s2+"____TRAILING PIPS [1...>]"; if (!GlobalVariableCheck(tst1)) {GlobalVariableSet(tst1,MAXIMUM_ORDERS0); MAXIMUM_ORDERS=MAXIMUM_ORDERS0;} else MAXIMUM_ORDERS=GlobalVariableGet(tst1); tst1=s5+"____"+s2+"____MINIMUM OF MARGIN(Creation Orange Stripes)"; if (!GlobalVariableCheck(tst1)) {GlobalVariableSet(tst1,MINIMUM_MARGIN0); MINIMUM_MARGIN=MINIMUM_MARGIN0;} else MINIMUM_MARGIN=GlobalVariableGet(tst1); tst1=s5+"____"+s2+"____TRAILING STOP FIRST"; if (!GlobalVariableCheck(tst1)) {GlobalVariableSet(tst1,TRAILING_STOP_FIRST0); TRAILING_STOP_FIRST=TRAILING_STOP_FIRST0;} else TRAILING_STOP_FIRST=GlobalVariableGet(tst1); tst1=s5+"____"+s2+"____TRAILING STOP"; if (!GlobalVariableCheck(tst1)) {GlobalVariableSet(tst1,TRAILING_STOP0); TRAILING_STOP=TRAILING_STOP0;} else TRAILING_STOP=GlobalVariableGet(tst1); tst1=s5+"____"+s2+"____(PRC)CANDLE WAITING [0-Disabled, 1...7200]"; if (!GlobalVariableCheck(tst1)) {GlobalVariableSet(tst1,LOT_SIZE_IN_PERCENT0); LOT_SIZE_IN_PERCENT=LOT_SIZE_IN_PERCENT0;} else LOT_SIZE_IN_PERCENT=GlobalVariableGet(tst1); tst1=s5+"____"+s2+"____MG DEPTH IN DEPOSIT"; if (!GlobalVariableCheck(tst1)) {GlobalVariableSet(tst1,MG_DEPTH0); MG_DEPTH=MG_DEPTH0;} else MG_DEPTH=GlobalVariableGet(tst1); tst1=s5+"____"+s2+"____TRAILING SPREAD"; if (!GlobalVariableCheck(tst1)) {GlobalVariableSet(tst1,TR_STP_1ST_SPREAD0); TR_STP_1ST_SPREAD=TR_STP_1ST_SPREAD0;} else TR_STP_1ST_SPREAD=GlobalVariableGet(tst1); tst1=s5+"____"+s2+"____WAITING TIME IN SECONDS [0...>]"; if (!GlobalVariableCheck(tst1)) {GlobalVariableSet(tst1,TRADE_SHIFT_REV0); TRADE_SHIFT_REV=TRADE_SHIFT_REV0;} else TRADE_SHIFT_REV=GlobalVariableGet(tst1); if (TRADE_SHIFT_REV!=TRADE_SHIFT_REV2) { THE_DATETIME=TimeLocal(); t_z=PositionsTotal(); for (i=0; iEXPIRED) { Print ("по этой причине были воспроизведены 4 гудка"); Print ("НАПОМИНАНИЕ: <срок действия Чистовика истёк>! - вам нужно будет поменять Чистовик"); GlobalVariableSet(s5+"____"+s2+"____Only Close Profit Orders Mode Enabled",1); TEST_SECOND0=0; for (i=0; i<4; i++){ PlaySound("alert.wav"); if (i<3) Sleep (1800);}}} if (TerminalInfoInteger(TERMINAL_CONNECTED) && !no_worked && MWORK!=0) { ask0=SymbolInfoDouble(s2,SYMBOL_ASK); bid0=SymbolInfoDouble(s2,SYMBOL_BID); tst1=s5+"____"+s2+"____CLOSE_ALL_PROFIT_ORDERS_(111-Yes)"; if (!GlobalVariableCheck(tst1)) GlobalVariableSet(tst1,0); if (GlobalVariableGet(tst1)==111) { t_z=PositionsTotal(); if (t_z>0) { xe=2; Alert ("запущен процесс закрытия всех прибыльных ордеров по инструменту ",s2); while (t_z>0 && xe>0) { for (i=0; i0 && PositionGetString(POSITION_SYMBOL)==s2 && (PositionGetInteger(POSITION_MAGIC)==MAGIC_NUMBER || MAGIC_NUMBER==0)) { CW=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP); W_P=PositionGetDouble(POSITION_VOLUME); cmd=PositionGetInteger(POSITION_TYPE); PM=PositionGetInteger(POSITION_MAGIC); try=50; res_try=false; while (!res_try && try>0 && CW>0){ if (CW>0){ ZeroMemory(request0); ZeroMemory(answer0); request0.action=TRADE_ACTION_DEAL; request0.position=ot; request0.symbol=s2; request0.volume=W_P; request0.deviation=SLIPPAGE_IN_PIPS*1.5; request0.magic=PM; if (cmd==0) request0.price=SymbolInfoDouble(s2,SYMBOL_BID); else request0.price=SymbolInfoDouble(s2,SYMBOL_ASK); request0.type=1-cmd;} res_try=OrderSend(request0,answer0); if (!res_try && (GetLastError()==1 || GetLastError()==4108)) try=0; try--; CW=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);} if (!res_try && CW>0) Print ("ошибка закрытия ордера № ",ot);}} t_z=PositionsTotal(); if (t_z>0) xe--;} Alert ("завершился процесс закрытия всех прибыльных ордеров по инструменту ",s2); Print ("осталось других незакрытых ордеров=",PositionsTotal());} else Alert ("отсутствуют открытые ордера по текущему инструменту"); GlobalVariableSet(tst1,0);} if (MOI2>1 && CRAZY==0) { DI=0; for (t=1; t0)) { t_z=PositionsTotal(); if (t_z>0) { for (i=0; i0) { if (ot<15) Sleep (10); ZeroMemory(request0); ZeroMemory(answer0); request0.action=TRADE_ACTION_SLTP; request0.position=xe; request0.symbol=s2; request0.sl=0; request0.tp=NormalizeDouble(order_SL,Digits_now); request0.magic=PositionGetInteger(POSITION_MAGIC); what=OrderSend(request0,answer0); if (!what) { if (GetLastError()==4108) {TOO_FIX[t]=0; ot=0;} if (GetLastError()==1) ot=0;} else {TOO_FIX[t]=0; DI=t;} ot--;}} else if (xe==TOO_FIX[t]) {TOO_FIX[t]=0; DI=t;}}}} if (DI==MOI2) MOI2--;} if (MOI3>1 && CRAZY==0) { DI=0; for (t=1; t0) { t_z=PositionsTotal(); if (t_z>0) { for (i=0; i0) { if (ot<15) Sleep (10); ZeroMemory(request0); ZeroMemory(answer0); request0.action=TRADE_ACTION_SLTP; request0.position=xe; request0.symbol=s2; request0.sl=0; request0.tp=0; request0.magic=PositionGetInteger(POSITION_MAGIC); what=OrderSend(request0,answer0); if (!what) { if (GetLastError()==4108) {TOO_FIX2[t]=0; ot=0;} if (GetLastError()==1) ot=0;} else {TOO_FIX2[t]=0; DI=t;} ot--;}} else if (xe==TOO_FIX2[t]) {TOO_FIX2[t]=0; DI=t;}}}} if (DI==MOI3) MOI3--;} if (TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) { W_P=TVL; TVL=SymbolInfoDouble(s2, SYMBOL_TRADE_TICK_VALUE); if (!abandon) { W=MMR; MMR=SymbolInfoDouble(s2, SYMBOL_MARGIN_INITIAL); if (MMR<=0) { Print ("текущее значение MMR с сервера сейчас было=",MMR); Print ("теперь MMR=",W," - исправлено!"); MMR=W;}} if (TVL<=0) {Print ("Внимание!, MODE_TICKVALUE=0"); TVL=W_P;} THE_DATETIME=TimeLocal(); now_spread=Point_DBL_to_INT(NormalizeDouble(ask0-bid0,Digits_now)); tst2="____"+s2+"____MG Mode Enabled"; if (GlobalVariableCheck(tst2)) { t_z=GlobalVariableGet(tst2); if (t_z==0 || t_z==1) { what=t_z; if (what!=MGE) Print ("активность режима MG_Engine была изменена на ",t_z); MGE=t_z;}} PENDING_OFF=true; MG_NOW_CREATE=false; ON_PRO2=0; Profit_ALL=0; DI=1; allo=0; i=PositionsTotal(); if (t_z0>i && i>0) { if (USE_DEPO_EMULATION==0){ Balance_Real=AccountInfoDouble(ACCOUNT_BALANCE);}} t_z0=i; t_z2=i; if (t_z2>0) { res_try=true; if (USE_DEPO_EMULATION!=0) { if (ORANGE_TIME>0 && THE_DATETIMEFree_Margin_Real) Free_Margin=Free_Margin_Real; vol_c=TVL*now_spread; for (i=0; i0 && PositionGetString(POSITION_SYMBOL)==s2 && (PositionGetInteger(POSITION_MAGIC)==MAGIC_NUMBER || MAGIC_NUMBER==0)) { if (CRAZY==0) tst3=PositionGetString(POSITION_COMMENT); PM=PositionGetInteger(POSITION_MAGIC); cmd=PositionGetInteger(POSITION_TYPE); OOP_for_try=PositionGetDouble(POSITION_PRICE_OPEN); if (cmd==1) zoom=OOP_for_try-SymbolInfoDouble(s2,SYMBOL_ASK); else zoom=SymbolInfoDouble(s2,SYMBOL_BID)-OOP_for_try; order_pips=Point_DBL_to_INT(NormalizeDouble(zoom,Digits_now)); LG=PositionGetDouble(POSITION_VOLUME); LG0=LG*MMR; STATUS[i]=LG0; Profit_Now=TVL*LG*order_pips+PositionGetDouble(POSITION_SWAP); ORS=false; if (Zalog_Total>1) { if (!SOC) VOLUME=((Balance_Real+Profit_ALL0)/Zalog_Total)*100; else VOLUME=Free_Margin_Real;} else ORS=true; equ2=false; what=false; SAFE_ID=false; if (!ORS && VOLUME<=STOP_OUT+FMZ && (order_pips>-1 || (ON_PRO==0 && order_pips<0 && -Profit_Now=MINIMUM_MARGIN && THE_DATETIME>EXPO2[i] && order_pips<0 && -Profit_Now>MG_DEPTH && (-order_pips>=LAST_LOST[i] || !BARRY) && cr_otp==0) { if (cmd==1) W_P=SymbolInfoDouble(s2,SYMBOL_ASK); else W_P=SymbolInfoDouble(s2,SYMBOL_BID); W=1; if (LEVEL_DEPTH_IN_DAYS<7) SAS=LEVEL_DEPTH_IN_DAYS*2; else SAS=LEVEL_DEPTH_IN_DAYS+1; if (SAS<4) SAS=4; else if (SAS>12) SAS=12; if (five && !ZARID) {SAS*=10; W=3.7;} else if (ZARID) {W=1.2; if (five) SAS*=100; else SAS*=50;} SS=hand_point*SAS; ferrum=false; ferrum2=false; if (cmd==1) { if (W_P>=iGlobal(LEVEL_DEPTH_IN_DAYS,cmd,W_P,ZARID,SS,W)) ferrum2=true; if (W_P>=FBM) ferrum=true;} else { if (W_P<=iGlobal(LEVEL_DEPTH_IN_DAYS,cmd,W_P,ZARID,SS,W)) ferrum2=true; if (W_P<=FBM) ferrum=true;} U=0; if ((HBR==0 && STRONG_SAFE_LEVEL_MODE==1) || ferrum) U=2; if (U==0) { if (HBR<=LEVEL_MAX_CROSS) U=1; else U=3;} out=false; if (U==1) { if (STRONG_SAFE_LEVEL_MODE==1 || ferrum2) out=false; else out=true;} if (!out) { if (U==2) out=false; else if (U==3 && !ferrum2) out=true;} if (out) { W=LG; while (W>minl && (Free_Margin_RealMG_DEPTH && TRADE_SHIFT_REV==0))) W-=MLST; if (W>minl) { Direction[DI]=1-cmd; MMM[DI]=W; MMM2[DI]=now_ticket; DI++; PENDING_OFF=false;}} if (BARRY) LAST_LOST[i]=-order_pips;} if (CRAZY==0 || (PENDING_OFF && CRAZY==1)) { if (PositionGetDouble(POSITION_SL)!=0) { if (CRAZY==0) { ot=NormalizeDouble(StringToDouble(tst3),0); xe=PositionsTotal(); OS=false; for (t=0; t-1) { result=false; if (MAXPLANC[i]) { if (LOT_SIZE_IN_PERCENT>0) BORDER[i]=0; VSL2[i]=now_spread; C[i]=0; O[i]=0; PLE=0; VSL[i]=0; LOSS=0; MAXPLANC[i]=0;} else { PLE=O[i]; LOSS=VSL[i]; bt=C[i]; if (MathAbs(bt)>0) { if (order_pips>LOSS+PLE) C[i]=0; else { if (bt>0){ U=now_spread*TCZ; if (U<1) U=1; if (LOSS-U>0) LOSS-=U; VSL[i]=LOSS; C[i]=-bt;} else if (PLE>0) {PLE=0; O[i]=0;}} result=true;}} if (PLE==0 && USE_TR_STP_FIRST) BEST_SELL=TRAILING_STOP_FIRST; else BEST_SELL=TRAILING_STOP; if (!result) { lp=order_pips-BEST_SELL; xe=lp-LOSS; if (xe>0) { zt=xe-TR_STP_1ST_SPREAD; if (zt>PLE && order_pips-MAXIMUM_ORDERS>lp+zt) { LOSS2=VSL2[i]; if (now_spread-LOSS24 && OCA[i]<2)) OCA[i]=0;} VSL[i]=lp;}} if (SAFE && Profit_Now>=CHECK_LAG && LG>minl) { SAFE_ID=true; what=true;} else if (LOT_SIZE_IN_PERCENT>0) {U=0; W_P=BORDER[i]; if (THE_DATETIMEW_P) U++; if (W==0) U=5; else if (bid0>W) U+=2;} else { if (W_P==99999) U=4; else if (ask00) { if (U==2 || U==3 || U==5) BORDER2[i]=bid0; if (U==1 || U==3 || U==4) BORDER[i]=ask0;}} else if ((BI_DIRECTIONAL==1 && LOSS==0) || (BI_DIRECTIONAL==2 && LOSS>0 && PLE==0) || (BI_DIRECTIONAL==3 && PLE>0) || (BI_DIRECTIONAL==4 && PLE==0) || (BI_DIRECTIONAL==6 && LOSS>0) || BI_DIRECTIONAL==5) {what=true; equ2=true;} if (U>0 && U<4) EXPO[i]=THE_DATETIME+LOT_SIZE_IN_PERCENT;} if (!equ2 && OCA[i]!=9999 && order_pips0 && PLE==0) || (INDEPENDENT==3 && PLE>0) || (INDEPENDENT==4 && PLE==0) || (INDEPENDENT==6 && LOSS>0) || INDEPENDENT==5)) { OCA[i]--; lp=OCA[i]; xe=C[i]; if (lp>0) U=MathAbs(xe); if ((xe<0 && order_pipsCHECK_LAG && -Profit_Now>vol_c*LG) {equ2=true; what=true;} else MAXPLANC[i]=true;} if (equ2 || what) { if (order_pips<0) {lp=Red; too_lose=true;} else {lp=Black; too_lose=false; if (SAFE_ID) {W_P=LG; LG=NormalizeDouble(LG*0.5,DIGITS_OF_LOT);}} if (CRAZY==0) { if (MGE) { if (PositionGetDouble(POSITION_SL)!=0) { ot=NormalizeDouble(StringToDouble(tst3),0);} else {if (PositionGetDouble(POSITION_TP)!=0) ot=-1; else ot=0;}} else ot=0;} if (equ2 && !what) {try=1; xe=10+five*50+ZARID*200; ii=10;} else {try=5; xe=0; ii=100;} res_try=false; while (!res_try && try>0) { if (cmd==0) CW=SymbolInfoDouble(s2,SYMBOL_BID); else CW=SymbolInfoDouble(s2,SYMBOL_ASK); if (!equ2 || what) { if (cmd==1) zoom=OOP_for_try-CW; else zoom=CW-OOP_for_try; order_pips=Point_DBL_to_INT(NormalizeDouble(zoom,Digits_now));} if ((equ2 && !what) || order_pips>0 || -TVL*LG*order_pips>CHECK_LAG) { ZeroMemory(request0); ZeroMemory(answer0); request0.action=TRADE_ACTION_DEAL; request0.position=now_ticket; request0.symbol=s2; request0.volume=LG; request0.deviation=SLIPPAGE_IN_PIPS+xe; request0.magic=PM; if (cmd==0) request0.price=SymbolInfoDouble(s2,SYMBOL_BID); else request0.price=SymbolInfoDouble(s2,SYMBOL_ASK); request0.type=1-cmd; res_try=OrderSend(request0,answer0); if (!res_try && (GetLastError()==1 || GetLastError()==4108)) try=0;} try--;} if (res_try) { if (SAFE_ID) { LG0=LG*MMR; W=NormalizeDouble(W_P-LG,DIGITS_OF_LOT); Profit_ALL+=(TVL*W*order_pips); STATUS[i]-=LG0;} else {STATUS[i]=-1; t_z0--; if (allo0>0) allo0--;} Profit_Now=TVL*LG*order_pips; if (!too_lose && ON_PRO>0) ON_PRO--; if (SPEECH_MODE>0) { if (SPEECH_MODE>1) need_speak=true; tst1="too_speech"; if (!GlobalVariableCheck(tst1)) sp_try=0; else { sp_try=GlobalVariableGet(tst1); while (sp_try!=0 && ii>0) { sp_try=GlobalVariableGet(tst1); ii--; Sleep (2);}} if (sp_try==0) GlobalVariableSet(tst1, Profit_Now); else if (THE_DATETIME>SP_TIMER) {Print ("Запустите на любом свободном инструменте!"); SP_TIMER=THE_DATETIME+43200;}} if (GlobalVariableGet("____ENABLE TRADE SOUNDS")==1) { if (too_lose) PlaySound("timeout.wav"); else PlaySound("alert2.wav");} Zalog_Total-=LG0; if (USE_DEPO_EMULATION!=0) Balance_Real+=Profit_Now; else Balance_Real=AccountInfoDouble(ACCOUNT_BALANCE); Profit_ALL0-=Profit_Now; if (CRAZY==0) { if (MGE && ot>0) { xe=PositionsTotal(); for (t=0; t0 && PositionGetString(POSITION_SYMBOL)==s2 && PositionGetDouble(POSITION_SL)!=0 && (PositionGetInteger(POSITION_MAGIC)==MAGIC_NUMBER || MAGIC_NUMBER==0)) { tst2=PositionGetString(POSITION_COMMENT); lc=NormalizeDouble(StringToDouble(tst2),0); if (lc==now_ticket) { ZeroMemory(request0); ZeroMemory(answer0); request0.action=TRADE_ACTION_SLTP; request0.position=xe; request0.symbol=s2; request0.sl=0; request0.tp=0; request0.magic=PM; what=OrderSend(request0,answer0); if (!what) { TOO_FIX2[MOI3]=ot; MOI3++;}}}}}}} else {Profit_ALL+=Profit_Now; allo++; if (order_pips>0) ON_PRO2++;}} else {Profit_ALL+=Profit_Now; allo++; if (order_pips>0) ON_PRO2++;} CW=Zalog_Total-Profit_ALL0; Free_Margin=Balance-CW; if (USE_DEPO_EMULATION==0) Free_Margin_Real=AccountInfoDouble(ACCOUNT_MARGIN_FREE); else Free_Margin_Real=Balance_Real-CW; if (Free_Margin>Free_Margin_Real) Free_Margin=Free_Margin_Real; if (THE_DATETIME>ORANGE_TIME && Free_Margin_Real=VIRTUAL_BALANCE*WEAPON_RANGE && Balance=LG) Balance=LG; else Balance=Balance_Real; Free_Margin=Balance-CW; PRIZE=true;} else if (PRIZE && -Free_MarginFree_Margin_Real) Free_Margin=Free_Margin_Real; if (DI!=1) MG_NOW_CREATE=true; t_handler=FileOpen(s3+s5+".bal", FILE_BIN|FILE_WRITE); if (t_handler!=-1) { lh[1]=PRIZE; lh[2]=Zalog_Total; lh[3]=Balance; FileWriteArray(t_handler, lh, 0, 4); FileClose(t_handler);} if (allo>0) { t_handler=FileOpen(s2+s5+".mls", FILE_BIN|FILE_WRITE); if (t_handler!=-1) { FileWriteArray(t_handler, LAST_LOST, 0, 500); FileClose(t_handler);}} if (allo==0) { ON_PRO=1; ORANGE_TIME=0;} if (need_speak) { GlobalVariableSet("too_speech_ALL", Profit_ALL); if (SPEECH_MODE==3) GlobalVariableSet("too_speech_FREE", Free_Margin);}} else if (ORANGE_TIME>0 && THE_DATETIME<=ORANGE_TIME) { Print ("сработала оранжевая полоса !"); Zalog_Total=0; if (USE_DEPO_EMULATION==1) { Balance_Real+=Profit_ALL0; Free_Margin_Real=Balance_Real;} else {Balance_Real=AccountInfoDouble(ACCOUNT_BALANCE); Free_Margin_Real=AccountInfoDouble(ACCOUNT_MARGIN_FREE);} Balance=VIRTUAL_BALANCE; Free_Margin=VIRTUAL_BALANCE; Profit_ALL=0; Profit_ALL0=0; ORANGE_TIME=0;} if (t_z2>0 && allo<1) { ArrayInitialize(LAST_LOST,-1); t_attempts=5; t_handler=-1; while (t_handler==-1 && t_attempts>0) {t_handler=FileOpen(s2+s5+".mls", FILE_BIN|FILE_READ); t_attempts--;} if (t_handler!=-1) {FileClose(t_handler); FileDelete(s2+s5+".mls");}} tst1=s5+"____"+s2+"____SHOW_ME_BALANCE (1-Yes/0-No)"; if (!GlobalVariableCheck(tst1)) GlobalVariableSet(tst1,0); else { t_z=GlobalVariableGet(tst1); if (t_z==1) { Balance_Real=AccountInfoDouble(ACCOUNT_BALANCE); Free_Margin_Real=AccountInfoDouble(ACCOUNT_MARGIN_FREE); Alert ("------------------------------"); Alert ("были выделены дополнительные средства [0/1]=",PRIZE); Alert ("баланс виртуальный=",Balance); Alert ("баланс реальный=",Balance_Real); Alert ("свободная маржа виртуальная=",Free_Margin); Alert ("свободная маржа реальная=",Free_Margin_Real); Alert ("активная маржа (залог)=",Zalog_Total); Alert ("открытая прибыль=",Profit_ALL); Alert ("всего ордеров=",allo); Alert ("MAGIC=",MAGIC_NUMBER); Alert ("***** инструмент=",s2," *****"); Alert ("------------------------------"); GlobalVariableSet(tst1,0);}} equ2=false; WWW=GlobalVariableGet(s5+"z_"+s3+"_txt"); Treasure=GlobalVariableGet(s5+"z_"+s3+"_crc"); if (WWW>0 && WWW<3 && Treasure>0) { GlobalVariableSet(s5+"z_"+s3+"_txt",0); GlobalVariableSet(s5+"z_"+s3+"_crc",0); if (Free_Margin_Real>=MINIMUM_MARGIN && THE_DATETIME>ORANGE_TIME && (PENDING_OFF || MG_SURE_CLOSE)) { equ2=true; Direction[DI]=WWW-1; MMM[DI]=0; DI++;} GlobalVariableSet(s5+"z_"+s3+"_ans",Treasure);} tst1=s5+"____"+s2+"____START TRADE W/O MASTER (1-Yes/0-No)"; if (GlobalVariableCheck(tst1)) NO_MASTER=GlobalVariableGet(tst1); else {GlobalVariableSet(tst1,NO_MASTER0); NO_MASTER=NO_MASTER0;} if (!equ2 && NO_MASTER==1 && allo==0 && Free_Margin_Real>=MINIMUM_MARGIN && THE_DATETIME>ORANGE_TIME && (PENDING_OFF || MG_SURE_CLOSE)) { Direction[DI]=0; MMM[DI]=0; DI++; Direction[DI]=1; MMM[DI]=0; DI++;} if (DI>1) { if (FRIDAY_STOP_TRADE_HOUR==-1) t=-1; else { TimeToStruct(THE_DATETIME,stru0); t=stru0.day_of_week; if (t==5) xe=stru0.hour;} if (EVERYDAY_STOP_TRADE_HOUR!=-1) { if (FRIDAY_STOP_TRADE_HOUR==-1) TimeToStruct(THE_DATETIME,stru0); if (stru0.hour>=EVERYDAY_STOP_TRADE_HOUR) {t=5; xe=FRIDAY_STOP_TRADE_HOUR;}} if (Agree && Agree2 && Free_Margin_Real>=MINIMUM_MARGIN && THE_DATETIME>ORANGE_TIME && (allomaxl) W_P=maxl; W_P=NormalizeDouble(W_P, DIGITS_OF_LOT);} Lot_Size_up=W_P; Lot_Size_dn=W_P; Free_Margin0=LG0;} ot=PositionsTotal(); Lot_add_up=0; Lot_add_dn=0; if (allo>0) { if (CRUSER_MIN_DEPO>0 && Balance>=CRUSER_MIN_DEPO) { CW=0; LG=100000; ot--; for (t=ot; t>-1; t--) if (PositionGetTicket(t)>0 && PositionGetString(POSITION_SYMBOL)==s2 && (PositionGetInteger(POSITION_MAGIC)==MAGIC_NUMBER || MAGIC_NUMBER==0)) { cmd=PositionGetInteger(POSITION_TYPE); zoom=PositionGetDouble(POSITION_VOLUME); order_SL=PositionGetDouble(POSITION_PRICE_OPEN); if (cmd==0 && CW==0) {W=zoom; CW=order_SL;} if (cmd==1 && LG==100000) {W_P=zoom; LG=order_SL;} if (CW!=0 && LG!=100000 && t!=0) break;} if (LG-SymbolInfoDouble(s2,SYMBOL_BID)CRUSER_LOT_INCREASE*CRUSER_MAX_LOT_ZOOM) Lot_add_dn=CRUSER_LOT_INCREASE*CRUSER_MAX_LOT_ZOOM;} if (SymbolInfoDouble(s2,SYMBOL_ASK)-CWCRUSER_LOT_INCREASE*CRUSER_MAX_LOT_ZOOM) Lot_add_up=CRUSER_LOT_INCREASE*CRUSER_MAX_LOT_ZOOM;}}} if (Lot_add_up!=0) { Lot_Size_up0=Lot_Size_up; Lot_Size_up+=Lot_add_up; if (Lot_Size_up>maxl) Lot_Size_up=maxl;} if (Lot_add_dn!=0) { Lot_Size_dn0=Lot_Size_dn; Lot_Size_dn+=Lot_add_dn; if (Lot_Size_dn>maxl) Lot_Size_dn=maxl;} vol_c=TVL*now_spread; for (t=1; tminl && (Free_Margin_RealMG_DEPTH && TRADE_SHIFT_REV==0))) || !equ2) { if (equ2) LG-=MLST; DepoMin=MMR*LG; W=vol_c*LG; equ2=true;} if ((W<=MG_DEPTH || TRADE_SHIFT_REV>0) && Free_Margin_Real>=DepoMin && Free_Margin_Real>=MINIMUM_MARGIN) { if (WWW==0) {zoom=SymbolInfoDouble(s2,SYMBOL_ASK); CW=zoom-9999*hand_point;} else {zoom=SymbolInfoDouble(s2,SYMBOL_BID); CW=zoom+9999*hand_point;} MqlTradeRequest request0={0}; MqlTradeResult answer0={0}; request0.action=TRADE_ACTION_DEAL; request0.symbol=s2; request0.volume=LG; request0.type=WWW; request0.price=NormalizeDouble(zoom,Digits_now); request0.sl=CW*ii; request0.tp=0; request0.deviation=SLIPPAGE_IN_PIPS; request0.magic=MAGIC_NUMBER; request0.comment=tst1; request0.expiration=0; equ=OrderSend(request0,answer0); L=answer0.deal; if (GlobalVariableGet("TRADE_START_SOUND")==0) { GlobalVariableSet("TRADE_START_SOUND",1); PlaySound("ringin.wav");} if (equ && L>0) { allo0++; Zalog_Total+=DepoMin; Profit_ALL0-=W; Free_Margin=Balance-(Zalog_Total-Profit_ALL0); U=PositionsTotal(); for (i=0; i0) { EXPO[i]=THE_DATETIME+LOT_SIZE_IN_PERCENT; if (WWW==0) { BORDER[i]=0; BORDER2[i]=0;} else {BORDER[i]=99999; BORDER2[i]=99999;}} if (i!=U-1) break;} if (ii==1 && CRAZY==0) { what=false; for (i=0; i0) { if (ot<4) Sleep (5); request0.action=TRADE_ACTION_SLTP; request0.position=MMM2[t]; request0.symbol=s2; request0.sl=0; request0.tp=NormalizeDouble(order_SL,Digits_now); request0.magic=OrderGetInteger(ORDER_MAGIC); what=OrderSend(request0,answer0); ot--;}}} if (!what) { TOO_FIX[MOI2]=MMM2[t]; MOI2++;}}} else if (DEBUG_MODE==1) { Print ("Ошибка создания ордера:"); Print ("код возврата=",answer0.retcode); Print ("коментарий="+answer0.comment);}}}} else if (t<=DI-1) break; if (Lot_add_up!=0) Lot_Size_up=Lot_Size_up0; if (Lot_add_dn!=0) Lot_Size_dn=Lot_Size_dn0;}}}} if (MWORK!=1) {FileSeek(q1, 0, SEEK_END); FileWriteDouble (q1,(double)ask0); FileSeek(q2, 0, SEEK_END); FileWriteDouble (q2,(double)bid0); FileSeek(q3, 0, SEEK_END); if (USE_LOCAL_TIME==1) THE_DATETIME=TimeLocal(); else THE_DATETIME=TimeCurrent(); FileWriteInteger(q3, THE_DATETIME, INT_VALUE);} Sleep(0);} void SetNoWork() {GlobalVariableSet(s5+"____"+s2+"____I_NEED_TO_REMOVE_RECEIVER_SN.ex4_(1-YES/0-NO)",1); return;} int GetShift(int j2) {int sl, t, si, crc, z; string wx; wx=DoubleToString(SetStartPos(j2),0)+"30"; sl=StringLen(wx); si=1; crc=0; for (z=0; z<47; z++) {t=StringToInteger(StringSubstr(wx,si,1))+177662; si++; if (si==sl) si=1; RID[z]/=t; crc+=RID[z];} return (crc);} int SetStartPos(int j7) {int log1, de, ror, zan, bil, y0; zan=MathMod(10000,3000); bil=zan*NormalizeDouble(MathCos(388),2); ror=MathLog(1); de=ror+zan; y0=c0; c0-=de; while (j7>zan) {de=MathAbs(j7+ror); for (log1=1; log10) { if (high_ID) { x0=iHigh(s2,PERIOD_D1,i0); if (x0!=0) { if (x0>found1 && i0<=d0) found1=x0; if (x0>found2 && i0<=SLD) found2=x0;} x0=iHigh(s2,PERIOD_H1,i0); if (i0<=imax && x0>=price && price>=iLow(s2,PERIOD_H1,i0)) re++;} else { x0=iLow(s2,PERIOD_D1,i0); if (x0!=0) { if (x0FBM) found1=FBM-shift0*zuma_W;} else {found1+=shift0; FBM=found2+shift0*zuma_W; if (found1