Orders Execution
0
Views
0
Downloads
0
Favorites
JQS_Terminator_Line_v1_1_0
//+----------------------------------------------------------------------+
//| JQS Terminator Line v1.1.0 |
//| Copyright © 2010, JQS aka Joo. |
//| http://www.mql4.com/ru/users/joo |
//+----------------------------------------------------------------------+
//| Òåðìèíàòîð (àñòðîíîìèÿ) (îò ëàò. terminare îãðàíè÷èâàòü) ëèíèÿ |
//| ñâåòîðàçäåëà, îòäåëÿþùàÿ îñâåù¸ííóþ (ñâåòëóþ) ÷àñòü íåáåñíîãî òåëà îò|
//| íåîñâåù¸ííîé (ò¸ìíîé) ÷àñòè. |
//| |
//| Òåðìèíàòîð (ÄÍÊ) ïîñëåäîâàòåëüíîñòü íóêëåîòèäîâ ÄÍÊ, óçíàâàåìàÿ |
//| ÐÍÊ-ïîëèìåðàçîé êàê ñèãíàë ê ïðåêðàùåíèþ ñèíòåçà ìîëåêóëû ÐÍÊ è |
//| äèññîöèàöèè òðàíñêðèïöèîííîãî êîìïëåêñà. |
//| |
//| Òåðìèíàòîð (ýëåêòðîíèêà) ïîãëîòèòåëü ýíåðãèè (îáû÷íî ðåçèñòîð) íà|
//| êîíöå äëèííîé ëèíèè, ñîïðîòèâëåíèå êîòîðîãî ðàâíî âîëíîâîìó |
//| ñîïðîòèâëåíèþ ëèíèè. |
//+----------------------------------------------------------------------+
#property copyright "Copyright © 2010, JQS aka Joo."
#property link "http://www.mql4.com/ru/users/joo"
//-----------------------------------------------------
//-------------------Ââîä ãëîáàëüíûõ ïåðåìåííûõ---------------------------
extern string MM = "-----------Óïðàâëåíèå êàïèòàëîì--------";
extern double K_Martin =1.0; //Êîýôô Ìàðòèíà
extern double MinLoss =1.0; //Ìèí. âîçìîæíûé óáûòîê â âàëþòå äåïî
extern double ProfitRatio=1.0; //Îòíîøåíèå TP/SL
extern int SLdefault =20; //Îòíîñèòåëüíûé ðàçìåð SL
//------------------------------------------------------------------------
//-------------------Ãëîáàëüíûå ïåðåìåííûå--------------------------------
double TP; //Îòíîñèòåëüíûé ðàçìåð
double TakeProfit; //Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò TP äî ask/bid
double TPline; //Àáñîëþòíàÿ âåëè÷èíà ëèíè TP
double SL; //Îòíîñèòåëüíûé ðàçìåð
double StopLoss; //Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò SL äî ask/bid
double SLline; //Àáñîëþòíàÿ âåëè÷èíà ëèíè SL
string UsersOrderType;
double Loss; //Òåêóùèé äîïóñòèìûé óáûòîê â âàëþòå äåïî
double Loss_Prev; //Ïðåäûäóùèé äîïóñòèìûé óáûòîê â âàëþòå äåïî
double Lots_New; //Êîëè÷åñòâî ëîòîâ äëÿ íîâûõ îðäåðîâ
//------------------------------------------------------------------------
//========================================================================
int init()
{
//-------------------------------------
Loss_Prev=MinLoss;
//-------------------------------------
return;
}
//========================================================================
//========================================================================
int start()
{
//-------------------------------------
if (OrdersTotal()>=1)
{
ObjectDelete("SignalLineSL");
ObjectDelete("SignalLineTP");
} else
{
LineDraw();
LineSens();
Criterion();//Çàöèêëåííàÿ ôóíêöèÿ
//-------------------------------------
OpenOrder();
//-------------------------------------
}
//-------------------------------------
return;
}
//========================================================================
//========================================================================
int deinit()
{
//-------------------------------------
ObjectDelete("SignalLineSL");
ObjectDelete("SignalLineTP");
//-------------------------------------
return;
}
//========================================================================
//========================================================================
void Criterion()
{
bool Flag=true;
//-------------------------------------
while (Flag==true)
{
if (LineFind()==true)
{
LineSens();
Inform();
} else
{
Flag=false;
}
}
//-------------------------------------
}
//========================================================================
//========================================================================
void LineDraw()
{
//-------------------------------------
double ask;
double bid;
double point;
//-------------------------------------
string Symb=Symbol();
ask =MarketInfo(Symb,MODE_ASK);
bid =MarketInfo(Symb,MODE_BID);
point =MarketInfo(Symb,MODE_POINT);
//-------------------------------------
StopLoss =SLdefault*point; //Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò SL äî ask/bid
SLline =bid-StopLoss; //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ñòîïà
TakeProfit =NormalizeDouble(StopLoss*ProfitRatio,Digits);//Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò TP äî ask/bid
TPline =ask+TakeProfit; //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ïðîôèòà
//-------------------------------------
//Ñîçäàäèì ëèíèþ TP
ObjectCreate("SignalLineTP", OBJ_HLINE, 0, 0,TPline);
ObjectSet ("SignalLineTP", OBJPROP_COLOR, Blue);
//Ñîçäàäèì ëèíèþ SL
ObjectCreate("SignalLineSL", OBJ_HLINE, 0, 0,SLline);
ObjectSet ("SignalLineSL", OBJPROP_COLOR, Red);
//-------------------------------------
}
//========================================================================
//========================================================================
void LineSens()
{
//-------------------------------------
RefreshRates();
string Symb = Symbol();
double stoplevel = MarketInfo(Symb,MODE_STOPLEVEL)*Point;//Àáñîëþòíûé ðàçìåð â ïóíêòàõ
double CurrentValue;
//-------------------------------------
//Îïðåäåëèì, Buy èëè Sell ïîçèöèÿ
CurrentValue =NormalizeDouble(ObjectGet("SignalLineSL", OBJPROP_PRICE1),Digits);//Íîðìàëèçîâàííîå öåíîâîå çíà÷åíèå óðîâíÿ SL
//Åñëè ëèíèÿ ñòîïà íèæå ñåðåäèíû ìåæäó Ask è Bid òî...
if (CurrentValue<(Ask+Bid)*0.5)
{//...èìååì äåëî ñ äëèííîé ïîçèöèåé----------
if (Bid-CurrentValue<stoplevel)
{
CurrentValue=Bid-stoplevel;
}
//Îáðàáîòàåì ëèíèþ ñòîïà
UsersOrderType="Buy";
ObjectMove("SignalLineSL",0,1, CurrentValue);//Ïåðåäâèíåì SL íà íîðìàëèçîâàííîå çíà÷åíèå óðîâíÿ SL
SLline =CurrentValue; //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ñòîïà
StopLoss =Bid-SLline; //Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò SL äî ask/bid
SL =StopLoss/Point; //Îòíîñèòåëüíûé ðàçìåð SL â ïóíêòàõ
//Îáðàáîòàåì ëèíèþ ïðîôèòà
TakeProfit =NormalizeDouble(StopLoss*ProfitRatio,Digits);//Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò TP äî ask/bid
TP =TakeProfit/Point; //Îòíîñèòåëüíûé ðàçìåð TP â ïóíêòàõ
TPline =Ask+TakeProfit; //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ïðîôèòà
ObjectMove("SignalLineTP",0,1, TPline); //Ïåðåäâèíåì TP íà íîðìàëèçîâàííîå çíà÷åíèå óðîâíÿ TP
//------------------------------------------
}
//----------------------------------------------------------
else
{//...èìååì äåëî ñ êîðîòêîé ïîçèöèåé---------
if (CurrentValue-Ask<stoplevel)
{
CurrentValue=Ask+stoplevel;
}
//Îáðàáîòàåì ëèíèþ ñòîïà
UsersOrderType="Sell";
ObjectMove("SignalLineSL",0,1, CurrentValue);//Ïåðåäâèíåì SL íà íîðìàëèçîâàííîå çíà÷åíèå óðîâíÿ SL
SLline =CurrentValue; //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ñòîïà
StopLoss =SLline-Ask; //Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò SL äî ask/bid
SL =StopLoss/Point; //Îòíîñèòåëüíûé ðàçìåð SL â ïóíêòàõ
//Îáðàáîòàåì ëèíèþ ïðîôèòà
TakeProfit =NormalizeDouble(StopLoss*ProfitRatio,Digits);//Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò TP äî ask/bid
TP =TakeProfit/Point; //Îòíîñèòåëüíûé ðàçìåð TP â ïóíêòàõ
TPline =Bid-TakeProfit; //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ïðîôèòà
ObjectMove("SignalLineTP",0,1, TPline); //Ïåðåäâèíåì TP íà íîðìàëèçîâàííîå çíà÷åíèå óðîâíÿ TP
//------------------------------------------
}
//-------------------------------------
WindowRedraw();
}
//========================================================================
//========================================================================
bool LineFind()
{
//-------------------------------------
if (ObjectFind("SignalLineTP")==-1)
{
return(false);
} else
{
return(true);
}
//-------------------------------------
}
//========================================================================
//========================================================================
void OpenOrder()
{
//-------------------------------------
int
Ticket, // Íîìåð îðäåðà
MN; // MagicNumber
bool Modify=false;
//-------------------------------------
Lot();
if (UsersOrderType=="Buy") // Áóäåì îòêðûâàòü Buy
{
Ticket=OrderSend(Symbol(),0,Lots_New,Ask,2,0.0,0.0,"",MN);
if (Ticket==-1)
Print("Íå óäàëîñü èñïîëíèòü ðûíî÷íûé îðäåð, îøèáêà - ",GetLastError());
else
{
OrderSelect(Ticket, SELECT_BY_TICKET) ;
Modify=OrderModify(Ticket,OrderOpenPrice(),SLline,TPline,0,Blue);
if (Modify==true)
Print("Íå óäàëîñü óñòàíîâèòü SL è TP îðäåðà. Âíèìàíèå!!! Îðäåð áåç çàùèòíûõ ñòîïîâ! Îøèáêà - ",GetLastError());
}
}
if (UsersOrderType=="Sell") // Áóäåì îòêðûâàòü Sell
{
Ticket=OrderSend(Symbol(),1,Lots_New,Bid,2,0.0,0.0,"",MN);
if (Ticket==-1)
Print("Íå óäàëîñü èñïîëíèòü ðûíî÷íûé îðäåð, îøèáêà - ",GetLastError());
else
{
OrderSelect(Ticket, SELECT_BY_TICKET) ;
Modify=OrderModify(Ticket,OrderOpenPrice(),SLline,TPline,0,Red);
if (Modify==true)
Print("Íå óäàëîñü óñòàíîâèòü SL è TP îðäåðà. Âíèìàíèå!!! Îðäåð áåç çàùèòíûõ ñòîïîâ! Îøèáêà - ",GetLastError());
}
}
//-------------------------------------
Comment("Îòêðîåì ïîçèöèþ "+ UsersOrderType+" ñ StopLoss=", SLline," TakeProfit=", TPline," Ðàçìåð ëîòà=",Lots_New);
//-------------------------------------
return;
}
//========================================================================
//========================================================================
void Lot()
{
//-------------------------------------
string Symb =Symbol(); // Ôèíàíñîâûé èíñòðóì.
double One_Lot =MarketInfo(Symb,MODE_MARGINREQUIRED);//Ðàçìåð ñâîáîäíûõ ñðåäñòâ, íåîáõîäèìûõ äëÿ îòêðûòèÿ 1 ëîòà
double Min_Lot =MarketInfo(Symb,MODE_MINLOT); //Ìèí. ðàçìåð. ëîòà
double Step =MarketInfo(Symb,MODE_LOTSTEP); //Øàã èçìåíåí ðàçìåðà ëîòà
double Free =AccountFreeMargin(); //Ñâîáîäíûå ñðåäñòâà
double LotPrice=MarketInfo(Symb, MODE_TICKVALUE); //Ñòîèìîñòü 1 ëîòà â âàëþòå äåïî íà 1 òèê
//-------------------------------------
if (OrdersHistoryTotal()<1)
{
Loss_Prev=MinLoss;
Lots_New=NormalizeDouble(Loss_Prev/(LotPrice*SL),2);
} else
{
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY);
if (OrderProfit()<0)
{
Loss_Prev*=K_Martin;
Lots_New=NormalizeDouble(Loss_Prev/(LotPrice*SL),2);
} else
{
Loss_Prev=MinLoss;
Lots_New=NormalizeDouble(Loss_Prev/(LotPrice*SL),2);
}
}
//-------------------------------------
}
//========================================================================
//========================================================================
double LotInfo()
{
//-------------------------------------
string Symb =Symbol(); // Ôèíàíñîâûé èíñòðóì.
double One_Lot =MarketInfo(Symb,MODE_MARGINREQUIRED);//Ðàçìåð ñâîáîäíûõ ñðåäñòâ, íåîáõîäèìûõ äëÿ îòêðûòèÿ 1 ëîòà
double Min_Lot =MarketInfo(Symb,MODE_MINLOT); //Ìèí. ðàçìåð. ëîòà
double Step =MarketInfo(Symb,MODE_LOTSTEP); //Øàã èçìåíåí ðàçìåðà ëîòà
double Free =AccountFreeMargin(); //Ñâîáîäíûå ñðåäñòâà
double LotPrice=MarketInfo(Symb, MODE_TICKVALUE); //Ñòîèìîñòü 1 ëîòà â âàëþòå äåïî íà 1 òèê
double LossPrevTemp;
double LotsNewTemp;
//-------------------------------------
if (OrdersHistoryTotal()<1)
{
LossPrevTemp=MinLoss;
LotsNewTemp=NormalizeDouble(LossPrevTemp/(LotPrice*SL),2);
} else
{
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY);
if (OrderProfit()<0)
{
LossPrevTemp=Loss_Prev*K_Martin;
LotsNewTemp=NormalizeDouble(LossPrevTemp/(LotPrice*SL),2);
} else
{
LossPrevTemp=MinLoss;
LotsNewTemp=NormalizeDouble(LossPrevTemp/(LotPrice*SL),2);
}
}
//-------------------------------------
return(LotsNewTemp);
}
//========================================================================
//========================================================================
void Inform()
{
//-------------------------------------
string Symb = Symbol();
string DepoCurrency = AccountCurrency(); //Íàèìåíîâàíèå âàëþòû äëÿ ñ÷åòà
double MeansOneLot = MarketInfo(Symb,MODE_MARGINREQUIRED); //Íåîáõîäèìî ñðåäñòâ äëÿ îòêðûòèÿ 1 ëîòà
double MeansFree = AccountFreeMargin(); //Çíà÷åíèå ñâîáîäíûõ ñðåäñòâ, ðàçðåøåííûõ äëÿ îòêðûòèÿ ïîçèöèé
double MeansGuaranty = AccountMargin(); //Çíà÷åíèå çàëîãîâûõ ñðåäñòâ, èñïîëüçóåìûõ äëÿ ïîääåðæàíèÿ îòêðûòûõ ïîçèöèé
double LotPriceTic = MarketInfo(Symb, MODE_TICKVALUE); //Ñòîèìîñòü 1 ëîòà â âàëþòå äåïî íà 1 òèê
double MaxLotPermissible = MathFloor((MeansFree/MeansOneLot)*100)/100;//Ìàêñèìàëüíî äîïóñòèìûé ëîò äëÿ îòêðûòèÿ ïîçèöèè
double MaxSLPermissible; //Ìàêñèìàëüíî äîïóñòèìûé SL äî StopOut
double stopout;
string ind;
//-------------------------------------
if (AccountStopoutMode()==0)
{
stopout=AccountStopoutLevel();
ind ="%";
MaxSLPermissible = MathFloor((MeansFree*(100-stopout))/(LotPriceTic*LotInfo()*100));
} else
{
stopout=AccountStopoutLevel();
ind =DepoCurrency;
//MaxSLPermissible = MathFloor( (MeansFree-stopout)/(LotPriceTic*LotInfo()) );
}
//-------------------------------------
Comment(
"SLline = ",SLline
,"\n",
"TPline = ",TPline
,"\n",
"TP = ",TP
,"\n",
"SL = ",SL//," MaxSL=",MaxSLPermissible
,"\n",
"Lot =",LotInfo()," MaxLot=",MaxLotPermissible
,"\n",
"Profit =",LotPriceTic*LotInfo()*TP," Loss=",LotPriceTic*LotInfo()*SL
,"\n",
"Óðîâåíü ñòîïëåâåëà = ",MarketInfo(Symb,MODE_STOPLEVEL)
,"\n",
"Ñïðåä = ",MarketInfo(Symb,MODE_SPREAD)
);
}
//========================================================================
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---