Calculator_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<=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