//+------------------------------------------------------------------+ //| 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<=0){ Alert(" Îøèáêà! Risk äîëæåí áûòü áîëüøå íóëÿ."); return(0); } if(Lot<MinLot){ Alert(" Îøèáêà! Lot íå äîëæåí áûòü ìåíüøå ",MinLot); return(0); } if(Lot>MaxLot){ Alert(" Îøèáêà! Lot íå äîëæåí áûòü áîëüøå ",MaxLot); return(0); } if(StopLoss<MinLevel){ 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); //áàçîâàÿ âàëþòà //SMB2=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<Lot){ 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<ryn_SL){ double iStopLoss=StopLoss; while(iStopLoss<ryn_SL){ 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); } //+------------------------------------------------------------------+ //| Êîíåö ðàáîòû ñêðèïòà | //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen