Orders Execution
Indicators Used
Miscellaneous
2
Views
0
Downloads
0
Favorites
!Graal_For_Tester!
//+------------------------------------------------------------------+
//| _ZZ_pred.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#include <stdlib.mqh>
extern int SL=90;
extern int TP=40;
extern int Ïðîõîäîâ=20;
int NumArround=0;
int ArrVol=1000000;
int per;
int MInProfit =0;
//----Variables for KimIV funcions ---------------------------------+
bool NumberOfTry=3,UseSound=false,print=false;
string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
color clOpenBuy = Blue; // Öâåò çíà÷êà îòêðûòèÿ Buy
color clOpenSell = Red; // Öâåò çíà÷êà îòêðûòèÿ Sell
bool MarketWatch=false;
bool gbDisabled = False; // Áëîêèðîâêà
int BuyMagic1=2891;
int SellMagic1=73351;
static int PrevTime=0;double Lot;
double MinLot, MaxLot, MarginMinLot;
int MinLotDgts,period,GrossPeriod,GrossTrand=0;
int Slippage=3;static double prr;
string Name="stat",namebin,namecsv;
//------------------------------------------------------------------+
double stat[][3];
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
MathSrand(GetTickCount());
Name=StringConcatenate(Name,Symbol(),Period());
namebin=StringConcatenate(Name,".bin");
namecsv=StringConcatenate(Name,".csv");
ArrayResize(stat,ArrVol);
per=1440/Period();
if(!GlobalVariableCheck("count"))return;
int count=GlobalVariableGet("count");
if(count<1){GlobalVariableDel("count");return;}
int handle2=FileOpen(namebin,FILE_BIN|FILE_READ);
if(handle2>=0){
FileReadArray(handle2,stat,0,count*3);
FileClose(handle2);
}else{GlobalVariableDel("count");}
MathSrand(TimeLocal());
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
double kof1,kof2,kof3;
int a1=1,a2=1,a3=1,i;
int count=GlobalVariableGet("count");
int handle2=FileOpen(namecsv,FILE_CSV| FILE_WRITE,',');
if(handle2<0){handle2=FileOpen(namecsv,FILE_CSV| FILE_WRITE,',');}
for( i=0;i<count;i++){
FileWrite(handle2,stat[i][0],stat[i][1],stat[i][2]);
}
FileClose(handle2);
int handle3=FileOpen(namebin,FILE_BIN| FILE_WRITE);
if(handle3<0){ handle3=FileOpen(namebin,FILE_BIN|FILE_WRITE);}
FileWriteArray(handle3,stat,0,(count*3));
FileClose(handle3);
GlobalVariableSet("count",count);
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{static int zz,zzav,zzmin,zzmax;static int napr;int ocount=0;
if(NevBar()){
ArrSearch();
if(CountOpOrd("0")<1){
if(IfCG()>0){OpenPosition("",1,0.1,SL,TP,0,CG());}
if(IfCG()<0){OpenPosition("",0,0.1,SL,TP,0,CG());}
if(IfCG()==0){
if(IsOptimization()){
if(MathRand() < 32767/2){napr=1;}else{napr=-1;}
if(napr>0){OpenPosition("",0,0.1,SL,TP,0,CG());napr=0;}
if(napr<0){OpenPosition("",1,0.1,SL,TP,0,CG());napr=0;}
}
}
}
}
return(0);
}
//+------------------------------------------------------------------+
//| èùåò çíà÷åíèå â ìàññ, åñëè íåò äîáàâëÿåò |
//+------------------------------------------------------------------+
void ArrSearch(){static int prewhistord=0;double hind,hprof,htyp;int acount,i;
if(OrdersTotal()<1){
if(OrdersHistoryTotal()>1){
if(prewhistord<OrdersHistoryTotal()){
prewhistord=OrdersHistoryTotal();
if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY)){
hind=NormalizeDouble(StrToDouble(OrderComment()),NumArround);
hprof=OrderProfit();
htyp=OrderType();
if(hprof<=0){return;}
}
for(i=0;i<ArrVol;i++){if(stat[i][0]==0){acount=i;break;}}
GlobalVariableSet("count",acount);
for(i=0;i<=acount;i++){
if(NormalizeDouble(stat[i][0],NumArround)==hind){return;}
}
stat[acount][0]=hind;
stat[acount][1]=hprof;
stat[acount][2]=htyp;
return;
}
}
}
return;
}
//-----------------------------------------------------------------------------
int IfCG(){double cg,st;
if(!GlobalVariableCheck("count")){return(0);}
int count=GlobalVariableGet("count");
for(int i=0;i<count;i++){
cg=NormalizeDouble(CG(),NumArround);
st=NormalizeDouble(stat[i][0],NumArround);
if(cg==st){
if(stat[i][1]>0){
if(stat[i][2]==0){return(-1);}
if(stat[i][2]==1){return(1);}
}
}
}
return(0);
}
//-----------------------------------------------------------------------------+
// Çà÷èòûâàåì äàííûå èç èíäèêàòîðà |
//-----------------------------------------------------------------------------+
double CG(){
double cg1[12],cg2[12],cg3[12];
double cg=0;
double ma1,ma2,ma3,ma4,ma5;int i=1;
ma1=iMA(Symbol(),0,8,0,1,0,i);
ma2=iMA(Symbol(),0,13,0,1,0,i);
ma3=iMA(Symbol(),0,21,0,1,0,i);
ma4=iMA(Symbol(),0,34,0,1,0,i);
ma5=iMA(Symbol(),0,55,0,1,0,i);
cg=(ma1-ma2)+(ma2-ma3)+(ma3-ma4)+(ma4-ma5);
cg=cg*100;
return(cg/Point);
}
//+------------------------------------------------------------------+
//| Ïîäñ÷èòûâàåò êîëè÷åñòâî îòêðûòûõ îðäåðîâ ñîãëàñíî óñëîâèÿì |
//+------------------------------------------------------------------+
int CountOpOrd(string Sy="",int Typ=-1,int Magik=-1){int count=0;
if(Sy=="0"){Sy=Symbol();}
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Sy||Sy==""){
if(OrderType()==Typ||Typ==(-1)){
if(OrderMagicNumber()==Magik||Magik==(-1)){
if(OrderCloseTime()==0){
count++;
}
}
}
}
}
}
return(count);
}
//+----------------------------------------------------------------------------+
// Ôóíêöèÿ êîíòðîëÿ íîâîãî áàðà |
//-----------------------------------------------------------------------------+
bool NevBar(){
static int PrevTime=0;
if (PrevTime==Time[0]) return(false);
PrevTime=Time[0];
return(true);}
//___________________ÊÈÌÓ_______ÐÅÑÏÅÊÒ________È_____ÓÂÀÆÓÕÀ___________________|
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| m - òåêñò ñîîáùåíèÿ |
//+----------------------------------------------------------------------------+
void Message(string m) {
//Comment(m);
if (StringLen(m)>0) Print(m);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 28.11.2006 |
//| Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| pp - öåíà óñòàíîâêè îðäåðà |
//| sl - öåíîâîé óðîâåíü ñòîïà |
//| tp - öåíîâîé óðîâåíü òåéêà |
//| ex - äàòà èñòå÷åíèÿ |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
bool fm;
color cl=White;
double op, pa, pb, os, ot;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
if (pp<=0) pp=OrderOpenPrice();
if (sl<0 ) sl=OrderStopLoss();
if (tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice() , dg);
os=NormalizeDouble(OrderStopLoss() , dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
if(pp==op&&sl==os&&tp==ot){return;}
if ((sl==os&&(os!=0||sl!=0))&& (tp==ot&&(ot!=0||tp!=0))) {return;}
for (it=1; it<=NumberOfTry; it++) {
//if ((!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
if (fm) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
er=GetLastError();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(print){Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(),
" op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp);}
Sleep(1000*10);
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 06.03.2008 |
//| Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèé |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//| ot - âðåìÿ îòêðûòèÿ ( 0 - ëþáîå âðåìÿ îòêðûòèÿ) |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("BuyLimit");
case OP_SELLLIMIT: return("SellLimit");
case OP_BUYSTOP : return("BuyStop");
case OP_SELLSTOP : return("SellStop");
default : return("Unknown Operation");
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 10.04.2008 |
//| Îïèñàíèå : Îòêðûâàåò ïîçèöèþ ïî ðûíî÷íîé öåíå. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà (NULL èëè "" - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ |
//| ll - ëîò |
//| sl - óðîâåíü ñòîï |
//| tp - óðîâåíü òåéê |
//| mn - MagicNumber |
//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double Sl=0, double Tp=0, int mn=0,string lsComm = "") {
color clOpen;
datetime ot;
double pp, pa, pb, tp ,sl;
int dg, err, it, ticket=0;
if (sy=="" || sy=="0") sy=Symbol();
int stoplevel=MarketInfo(sy,MODE_STOPLEVEL);
int spread=MarketInfo(sy,MODE_SPREAD);
if(Tp!=0&&Tp<stoplevel+spread){Tp=stoplevel;}
if (op<1){
if (Sl>0) {sl=MarketInfo(Symbol(),MODE_ASK)-Sl*Point; }else {sl=0;}
if (Tp>0) {tp=MarketInfo(Symbol(),MODE_ASK)+Tp*Point; }else{ tp=0;}
}else{
if (Sl>0) {sl=MarketInfo(Symbol(),MODE_BID)+Sl*Point; }else{ sl=0;}
if (Tp>0) {tp=MarketInfo(Symbol(),MODE_BID)-Tp*Point;} else {tp=0;}}
if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
for (it=1; it<=NumberOfTry; it++) {
if (IsStopped()) {
Print("OpenPosition(): Îñòàíîâêà ðàáîòû ôóíêöèè");
break;}
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
dg=MarketInfo(sy, MODE_DIGITS);
pa=MarketInfo(sy, MODE_ASK);
pb=MarketInfo(sy, MODE_BID);
if (op==OP_BUY) pp=pa; else pp=pb;
pp=NormalizeDouble(pp, dg);
ot=TimeCurrent();
if (MarketWatch)
ticket=OrderSend(sy, op, ll, pp, Slippage, 0, 0, lsComm, mn, 0, clOpen);
else
ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);
if (ticket>0) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
if (pa==0 && pb==0) Message("Ïðîâåðüòå â Îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
// Âûâîä ñîîáùåíèÿ îá îøèáêå
if(print){
Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);}
// Áëîêèðîâêà ðàáîòû ñîâåòíèêà
if (err==2 || err==64 || err==65 || err==133) {
gbDisabled=True; break;
}
// Äëèòåëüíàÿ ïàóçà
if (err==4 || err==131 || err==132) {
Sleep(1000*300); break;
}
if (err==128 || err==142 || err==143) {
Sleep(1000*66.666);
if (ExistPositions(sy, op, mn, ot)) {
if (UseSound) PlaySound(NameFileSound); break;
}
}
if (err==140 || err==148 || err==4110 || err==4111) break;
if (err==141) Sleep(1000*100);
if (err==145) Sleep(1000*17);
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
if (err!=135) Sleep(1000*7.7);
}
}
if (MarketWatch && ticket>0 && (sl>0 || tp>0)) {
if (OrderSelect(ticket, SELECT_BY_TICKET)) ModifyOrder(-1, sl, tp);
}
}
//+----------------------------------------------------------------------------+
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
---