Калькулятор Forex

//+——————————————————————+ //| Calculator_Forex.mq4 | //| Copyright © 2007, DRKNN | //| drknn@mail.ru | //+——————————————————————+ #property copyright "Copyright © 2007, DRKNN" #property link "drknn@mail.ru" #property show_inputs extern double Depozit=0.0;//каким числом капитала будем рисковать (в случае если ноль, то рассчёт идет для того депозита, что в терминале) extern double Risk=3.0;//каким числом капитала будем рисковать (в процентах) extern string t11="——- Для рассчёта стоп-лосса по лоту ———"; extern double Lot=0.2;//с каким лотом будем открывать позицию. extern string t1="——- Для рассчёта лота по стоп-лоссу ———"; extern double StopLoss=15.0; /* формула рассчёта большого стоп-лосса для указанного пользователем лота: SL_PNT=normRisk*normDepozit/PointPrise/Lot; */ //+——————————————————————+ //| Начало работы скрипта | //+——————————————————————+ int start() { string SMB=Symbol(); double normRisk=0;//содержит нормализованный риск double SL_PNT=0;//стоп-лосс в пунктах double MinLot=MarketInfo(SMB,MODE_MINLOT);//минимальный размер лота double MaxLot=MarketInfo(SMB,MODE_MAXLOT);//большой размер лота double ryn_Lot=0;//рассчитываемый лот для указнааного пользователем стоп-лосса double LotStep=MarketInfo(SMB,MODE_LOTSTEP);//ход трансформации лота double normDepozit=0; int TipInstrumenta=10000; double PointPrise=0; string SMB1,SMB2; double BazCours=0;// курс базисной валюты по отношению к доллару double ryn_PointPrise=0;//цена пункта при минимальном лоте double ryn_SL=0;//стоп-лосс для минимального лота int MinLevel=MarketInfo(SMB,MODE_STOPLEVEL);//Минимально допустимый уровень стоп-лосса (тейк-профита) в пунктах string t1="============================="; //———————————————————————————————————————— Alert (t1); //——— Защита от дурака ———————- if(Risk Alert(" Неточность! Risk должен быть больше нуля."); return(0); } if(Lot Alert(" Неточность! Lot не должен быть меньше &направляться;,MinLot); return(0); } if(Lot>MaxLot){ Alert(" Неточность! Lot не должен быть больше ",MaxLot); return(0); } if(StopLoss Alert(" Неточность!

StopLoss не должен быть меньше ",MinLevel," пунктов"); return(0); } if(Lot>=MinLot && Risk!=0 && StopLoss>=MinLevel){ //—— нормализуем депозит ———— if(Depozit==0){ normDepozit=AccountBalance();//Баланс счёта } if(Depozit>0){ normDepozit=Depozit; } //—— нормализуем процент риска ———— normRisk=Risk/100; // ——- наблюдаем, Risk," процентов от депозита это какое количество в центах —————— double normRiskPersent=NormalizeDouble(normDepozit*normRisk,2); // ——— вычисляем какая пара (прямая, обратная, кросс) ————— TipInstrumenta=StringFind( SMB,"USD",0); //—— извлекаем имя первой валютной пары ———— SMB1=StringSubstr(SMB,0,3); //базисная валюта //на данный момент2=StringSubstr(SMB,3,3);// валюта котирования. // ——- текущая котировка базисной валюты к доллару США ————- BazCours=MarketInfo(SMB1+"USD",MODE_BID); //Alert("Tекущая котировка базисной валюты к доллару США = ",BazCours); // ——— рассчитываем цена пункта ————————- if(TipInstrumenta==3){//пара прямая, напр. EurUsd PointPrise=1000000*Lot/10*Point; ryn_PointPrise=1000000*MinLot/10*Point;//цена пункта при минимальном лоте } if(TipInstrumenta==0){//пара обратная, напр. UsdJpy PointPrise=1000000*Lot/10*Point/Bid; ryn_PointPrise=1000000*MinLot/10*Point/Bid;//цена пункта при минимальном лоте } if(TipInstrumenta==-1){//Кросс-пара, напр EurJpy PointPrise=1000000*Lot/10*Point*BazCours/Bid; ryn_PointPrise=1000000*MinLot/10*Point*BazCours/Bid; } // —— нормализуем взятую цена пункта —— PointPrise=NormalizeDouble(PointPrise,2); ryn_PointPrise=NormalizeDouble(ryn_PointPrise,2); // ========== вычисляем большой стоп-лосс для указанного пользователем лота ========================================= //—— наблюдаем, сколько раз минимальный лот укладывается в пользовательском ————- double iMinLot=MinLot; int SchLots=0;//какое количество минимальных лотов укладывается в пользовательском if(Lot==MinLot){SchLots=1;} else if(Lot>MinLot){ while(iMinLot iMinLot=iMinLot+LotStep; SchLots++; } } //сейчас вычисляем уровень стоп-лосса SL_PNT=normRisk*normDepozit/PointPrise/SchLots; SL_PNT=NormalizeDouble(SL_PNT,0); // ========== вычисляем большой лот для указанного пользователем стоп-лосса ========================================= // —— наблюдаем, какой стоп-лосс окажется при минимальном лоте ————- double jj=1; ryn_SL=normRisk*normDepozit/ryn_PointPrise/jj; ryn_SL=NormalizeDouble(ryn_SL,0); // —— наблюдаем, сколько раз пользовательский стоп-лосс умещается в стоп-лоссе минимального лота int SchSL=0;//какое количество пользовательских стоп-лоссов умещается в большом стоп-лоссе при минимальном лоте if(StopLoss==ryn_SL){SchSL=1;} else if(StopLoss double iStopLoss=StopLoss; while(iStopLoss iStopLoss=iStopLoss+iStopLoss; SchSL++; } } //—— сейчас просчитываем искомый лот ————- ryn_Lot=SchSL*MinLot; // ———— выводим результаты —————- Alert("Минимально допустимый уровень стоп-лосса = ",MinLevel," пунктов"); Alert(&направляться;Цена пункта при минимальном ",MinLot," лоте = ",ryn_PointPrise," $"); Alert("Цена пункта при лоте ",Lot," = ",PointPrise," $"); Alert(Risk," процентов от депозита = ",normRiskPersent," $"); Alert("Денег на счету = ",normDepozit," $"); Alert("———"); Alert("Большой лот = ",ryn_Lot); Alert(SMB," Рассчёт лота для стоп-лосса = ",StopLoss," пунктов :"); Alert("———"); Alert("Большой стоп-лосс = ",SL_PNT," пунктов"); Alert(SMB," Рассчёт стоп-лосса для лота = ",Lot," :"); Alert (t1); } return(0); } //+——————————————————————+ //| Финиш работы скрипта | //+——————————————————————+

Calculator_Forex.mq4