Orders Execution
0
Views
0
Downloads
0
Favorites
TitanicSmall_v1_1
//+------------------------------------------------------------------+
//| $Titanic.mq4 |
//| Alex |
//| al5@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Alex"
#property link "al5@yandex.ru"
/* â ñîâåòíèêå çàëîæåíà ìûñëü ,÷òî ðûíîê íàõîäèòñÿ â êâàçèóñòîé÷èâîì ñîñòîÿíèè íåêîòîðîå âðåìÿ â ïðîñòîíàðîäèè
òðåíä è ôëåò , ê ýòèì ïîíÿòèÿì íàäî äîáàâèòü åùå ïóøèñòîñòü ðûíêà .ò å åñëè äâèæåíèå íà÷àëîñü
òî îíî ñêîðåå âñåãî ïðîäîëæèòñÿ è ó êàæäîãî äâèæåíèÿ áóäåò îòêàò âîïðîñ çàêëþ÷àåòñÿ â ïðàâèëüíîñòè
ïàðàìåòðîâ ñòîïîâ è ïðîôèòîâ äëÿ ýòîé ôàçû ðûíêà è ïðèìåíåíèèè ñòðàòåãèè íà îòêàòàõ èëè íà ïðîäîëæåíèè äâèæåíèÿ.
×òîáû íå äóìàòü ïðî îïòèìèçàöèþ âåäåòñÿ âèðòóàëüíî ñðàçó 640 âîçìîæíûõ êîìáèíàöèé,òî ÷òî ÿâëÿåòñÿ ëó÷øèì îòáèðàåòñÿ
äëÿ ðåàëüíîé òîðãîâëè . Äëÿ óìåíüøåíèÿ êîë-âà ñòðàòåãèé ñòîï ëîññ òàêæå ÿâëÿåòñÿ òðåéëèíãîì ,êîòîðûé íà÷èíàåò äâèæåíèå
ñðàçó íå äîæèäàÿñü ïðîôèòà .
*/
double Resultat_v[256,644] ;// ìàññèâ ðåçóëüòàòîâ òîðãîâëè
double Torgovlya_v[7,644] ;// ìàññèâ îïèñàíèÿ îðäåðîâ
// òîðã îïåðàöèÿ, öåíà îòêðûòèÿ, ñòîï ëîññ, òåéê ïðîôèò, ôëàã ñîñòîÿíèÿ ïîçèöèè, ìàãèê, ïðèáûëü çàêðûòîãî îðäåðà
int Flag[644] ;// ìàññèâ ôëàãîâ äëÿ êîíòðîëÿ ïîçèöèè
double ExpectPayoff[644]; // ìàññèâ ìàòåìàòè÷åñêèõ îæèäàíèé ïî 10 ïîñëåäíèì ñäåëêàì
int Strategi[100,2] ; //ìàññèâ â êîòîðîì õðàíÿòñÿ íîìåðà ñòðàòåãèé .
double Lot=0.1 ;
//====================================================================
int init()
{
//èíèöèàëèçàöèÿ ìàññèâà îðäåðîâ
for (int i=0 ; i<=643 ;i++)
{
Torgovlya_v[0,i]=-1.0;
ExpectPayoff[i]=-1 ;
}
for ( i=0 ; i<=9 ;i++)
{
Strategi[i,0]=-2 ;
Strategi[i,1]=-5 ;
}
//----
return(0);
}
//====================================================================
int deinit()
{
return(0);
}
//===================================================================
int start()
{
int regim,SL,cde,aaa,MagicReal,regim_1 ;
double OpenPrice,Magic_Long,Magic_Short_Real,Magic_Short,Magic_Long_Real,ClosePrice ;
bool ccc ;
static int ddd=-1 ;
//Print("ôóíêöèÿ ñòàðò íà÷àëà ðàáîòû");
for (int i=40 ;i<=120 ; i++)
{
Magic_Long=10000+i ;
Magic_Short_Real=20000+i ;
Magic_Short=30000+i ;
Magic_Long_Real=40000+i ;
if ( Digits==3 || Digits==5 ) SL=i*10 ;
else SL=i ;
regim_1=TipeOrder_v(Magic_Long) ;
// Print("Magic_Long",Magic_Long);
// Print("regim",regim);
switch (regim_1)
{
case -1 : //Âûñòàâèòü îòëîæåííûé îðäåð íà ïîêóïêó åñëè îðäåðîâ íà ïîêóïêó íåò
// Çàêðûòü îðäåð íà ïðîäàæó ñ Magic_Short_Real
OrderSend_v(4.0,Ask+SL*Point,Ask,Ask+2*SL*Point,0.0,Magic_Long,0.0) ;
cde=TipeOrder_v(Magic_Short_Real) ;
aaa=index_v(Magic_Short_Real) ;
Flag[aaa]=0 ;
if (cde==1 )// åñëè èìååòñÿ îòêðûòûé îðäåð íà ïðîäàæó ñ Magic_Short_Real çàêðûâàåì åãî
{
OrderClose_v(Magic_Short_Real) ;
// Print("Çàêðûâàåòñ Magic_Short_Real ñ ",Magic_Short_Real) ;
// Print("ïðèáûëü " ,Torgovlya_v[6,aaa]*1000);
}
break ;
case 4: // ìîäèôèêàöèÿ îòëîæåííîãî îðäåðà
OpenPrice=OrderOpenPrice_v(Magic_Long) ;
if ((OpenPrice- Ask)> (SL+50)*Point)
{
// Print("ìîäèôèêàöèÿ îòëîæåííîãî îðäåðà",Magic_Long);
OrderModify_v(Magic_Long,Ask+SL*Point,Ask,Ask+2*SL*Point) ;
}
break ;
case 0:
/*
åñëè îòëîæåííûé îðäåð Buy_Stop ñðàáàòûâàåò ñòàíîâèòñÿ îðäåðîì Buy òî åãî ìîäèôèöèðóåì ïî ñòîï ëîññó
è åñëè ôëàã êîðîòêîé ïîçèöèè =1 òî åå çàíîâî íå îòêðûâàåì , ýòî çíà÷èò ÷òî êîðîòêàÿ ïîçà ëîâÿùàÿ îòêàò
áûëà çàêðûòà íà òðåíäå ïî ñòîïó è îòêðûâàòü åå çàíîâî íå íàäî
*/
ClosePrice=OrderStopLoss_v(Magic_Long) ;
if ((Ask-ClosePrice) > (SL+50)*Point)
OrderModify_v(Magic_Long,0.0,Ask-SL*Point,0.0) ;
regim=TipeOrder_v(Magic_Short_Real) ; // ïðîâåðêà íàëè÷èÿ êîðîòêîé ïîçû
aaa=index_v(Magic_Short_Real) ;
if (regim==1 || Flag[aaa]==1)
break ;
OrderSend_v(1.0,Bid,Bid+SL*Point,0.0,0.0,Magic_Short_Real,0.0) ;
Flag[aaa]=1 ;
// Print("îòêðûâàåì Magic_Short_Real ñ ",Magic_Short_Real) ;
break ;
}
///////////////////////////////////////////////////////////////////////////////////////
regim_1=TipeOrder_v(Magic_Short);
switch (regim_1)
{
case -1:
OrderSend_v(5,Bid-SL*Point,Bid,Bid-2*SL*Point,0.0,Magic_Short,0.0) ;
cde=TipeOrder_v(Magic_Long_Real) ;
aaa=index_v(Magic_Long_Real);
Flag[aaa]=0 ;
if (cde==0)
{
OrderClose_v(Magic_Long_Real) ;
}
case 5:
OpenPrice=OrderOpenPrice_v(Magic_Short);
if ((Bid-OpenPrice)> (SL+50)*Point)
OrderModify_v(Magic_Short,Bid-SL*Point,Bid,Bid-2*SL*Point) ;
break ;
case 1:
ClosePrice=OrderStopLoss_v(Magic_Short) ;
if ((ClosePrice-Bid)>(SL+50)*Point)
OrderModify_v(Magic_Short,0.0,Bid+SL*Point,0.0) ;
regim=TipeOrder_v(Magic_Long_Real);
aaa=index_v(Magic_Long_Real) ;
if (regim==0 || Flag[aaa]==1)
break ;
OrderSend_v(0,Ask,Ask-SL*Point,0,0,Magic_Long_Real,0) ;
Flag[aaa]=1;
break ;
}
}
//----
Vedeniepozi();
ResTorgovlya_v();
aaa=Expected_Payoff_v(); // âîçâðàò èíäåêñà ñòðàòåãèè ãäå ìàò îæèäàíèå áîëüøå âñåãî
// Çäåñü çàïîëíÿþòñÿ ñòàðøèå ÿ÷åéêè ìàññèâà ñòðàòåãèé ïîñëåäíåé ïðèøåäøåé ñòðàòåãèåé
// ñ ìàêñèìàëüíûì ìàòåìàòè÷åñêèì îæèäàíèåì
if (aaa!=ddd)
{
int www=OrdersTotal() ;
Print(" Âñåãî îðäåðîâ â äåëå ðàçðåøåíà óñòàíîâêà îòëîæåííèêîâ ",www);
Print("Ìàòîæèäàíèå ",ExpectPayoff[aaa]) ;
for ( i=1 ; i<=99 : ; i++)
{
Strategi[i-1,0]=Strategi[i,0] ;
Strategi[i-1,1]=Strategi[i,1] ;
}
if (aaa==0) MagicReal=MathRand()+1 ;
else MagicReal=aaa ;
ccc=true ;
while ( ccc)
{
for ( i=0 ;i<=99 ; i++)
{
if ( MagicReal==Strategi[i,1] )
{
ccc=true ;
MagicReal=MagicReal+MathRand()+1 ;
break ;
}
ccc=false ;
}
}
Strategi[99,0]=aaa ;
Strategi[99,1]=MagicReal ;
ddd=aaa ;
}
// åñëè ìàò æèäàíèåïîñëåäíåé ñòðàòåãèè ïîëîæèòåëüíî òî åå êîïèðóåì â ðåàëüíóþ ñäåëêó
if ( aaa >= 0 )
{
Copy_Position_r(Strategi[99,0],Strategi[99,1]) ;
}
for ( i=0 ; i<=98 ; i++ )
{
// åñëè íåò ðåàëüíîãî îðäåðà ñ òàêèì ìàãèêîì òî îñâîáîæäàåì ÿ÷åéêó â ìàññèâå Strategi
if ( Type_Order_r(Strategi[i,1]) < 0)
{
Strategi[i,0]=-2 ;
Strategi[i,1]=-1 ;
continue ;
}
// åñëè ðåàëüíûé îðäåð ñ òàêèì ìàãèêîì ÿâëÿåòñÿ îòëîæåííûì òî åãî óäàëÿåì
if (Type_Order_r(Strategi[i,1]) >1 )
{
Delete_Position_r(Strategi[i,0],Strategi[i,1]) ;
continue ;
}
Copy_Position_r(Strategi[i,0],Strategi[i,1]) ;
}
// Óäàëåíèå èç ìàññèâà âñåõ îòðàáîòàííûõ ñòðàòåãèé ñî ñäâèãîì âïðàâî â ðåçóëüòàòå â ñòàðøèõ èíäåêñàõ íàõîäÿòñÿ
// ìàãèêè èíäåêñû ñòðàòåãèé êîòîðûå â äàííûé ìîìåíò ðàáîòàþò
for ( i=99 ;i<=1 ;i--)
{
if ( Strategi[i,0]==-2 )
{
for ( int j=i ; j<=1 ; j-- )
{
Strategi[j,0]=Strategi[j-1,0] ;
Strategi[j,1]=Strategi[j-1,1] ;
}
Strategi[0,0]=-2 ;
Strategi[0,1]=-1 ;
}
}
return(0);
}
//===================================================================
int index_v( int magic)
// ôóíêöèÿ âîçâðàùàåò èíäåêñ äëÿ ìàññèâà ïî ìàãèêó
{
int index=0,aaa,bbb,ccc ;
aaa=magic/10000.0 ;
if (aaa==1)
return(magic-aaa*10000-40) ;
if (aaa==2)
return(magic-aaa*10000-40+161) ;
if (aaa==3)
return(magic-aaa*10000-40+322) ;
if (aaa==4)
return(magic-aaa*10000-40+483) ;
return(index) ;
}
//====================================================================
void OrderModify_v(int magic,double OpenPrice,double StopLoss,double TeikProfit)
{
int index=index_v(magic) ;
int aaa ;
aaa=Torgovlya_v[0,index] ;
switch (aaa)
{
// ïðîâåðêà íà âøèâîñòü ìîäèôèêàöèè îðäåðà Buy
case 0:
if ((Torgovlya_v[0,index]==0.0 && TeikProfit!=0.0 && Ask > TeikProfit) ||
(Torgovlya_v[0,index]==0.0 && StopLoss!=0.0 && Ask < StopLoss))
{
Print("Îøèáêà ìîäèôèêàöèè îðäåðà Buy ñ ìàãèêîì ",magic);
}
break ;
// ïðîâåðêà íà âøèâîñòü ìîäèôèêàöèè îðäåðà Sell
case 1:
if ((Torgovlya_v[0,index]==1.0 && TeikProfit!=0.0 && Bid < TeikProfit) ||
(Torgovlya_v[0,index]==1.0 && StopLoss!=0.0 && Bid > StopLoss))
{
Print("Îøèáêà ìîäèôèêàöèè îðäåðà Buy ñ ìàãèêîì ",magic);
}
break ;
// ïðîâåðêà íà âøèâîñòü ìîäèôèêàöèè îðäåðà BuyLimit
case 2:
if ((Torgovlya_v[0,index]==2.0 && Ask < OpenPrice) ||
(Torgovlya_v[0,index]==2.0 && TeikProfit!=0.0 && TeikProfit < OpenPrice) ||
(Torgovlya_v[0,index]==2.0 && StopLoss!=0.0 && StopLoss > OpenPrice))
{
Print("Îøèáêà ìîäèôèêàöèè îðäåðà BuyLimit ñ ìàãèêîì ",magic);
}
break ;
// ïðîâåðêà íà âøèâîñòü ìîäèôèêàöèè îðäåðà SellLimit
case 3:
if ((Torgovlya_v[0,index]==3.0 && Bid > OpenPrice) ||
(Torgovlya_v[0,index]==3.0 && TeikProfit!=0.0 && TeikProfit > OpenPrice) ||
(Torgovlya_v[0,index]==3.0 && StopLoss!=0.0 && StopLoss < OpenPrice))
{
Print("Îøèáêà ìîäèôèêàöèè îðäåðà SellLimit ñ ìàãèêîì ",magic);
}
break ;
// ïðîâåðêà íà âøèâîñòü ìîäèôèêàöèè îðäåðà BuyStop
case 4:
if ((Torgovlya_v[0,index]==4.0 && Ask > OpenPrice) ||
(Torgovlya_v[0,index]==4.0 && TeikProfit!=0.0 && TeikProfit < OpenPrice) ||
(Torgovlya_v[0,index]==4.0 && StopLoss!=0.0 && StopLoss > OpenPrice))
{
Print("Îøèáêà ìîäèôèêàöèè îðäåðà BuyLimit ñ ìàãèêîì ",magic);
}
break ;
// ïðîâåðêà íà âøèâîñòü ìîäèôèêàöèè îðäåðà SellStop
case 5:
if ((Torgovlya_v[0,index]==5.0 && Bid < OpenPrice) ||
(Torgovlya_v[0,index]==5.0 && TeikProfit!=0.0 && TeikProfit > OpenPrice) ||
(Torgovlya_v[0,index]==5.0 && StopLoss!=0.0 && StopLoss < OpenPrice))
{
Print("Îøèáêà ìîäèôèêàöèè îðäåðà SellLimit ñ ìàãèêîì ",magic);
}
break ;
}
//Óñòàíîâêà öåíû îòêðûòèÿ ñòîïà è òåéêà äëÿ îòëîæåííûõ îðäåðîâ
if (Torgovlya_v[0,index] > 1 )
{
Torgovlya_v[1,index]=NormalizeDouble(OpenPrice,Digits) ;
Torgovlya_v[2,index]=NormalizeDouble(StopLoss,Digits) ;
Torgovlya_v[3,index]=NormalizeDouble(TeikProfit,Digits) ;
Torgovlya_v[4,index]=0.0 ;
Torgovlya_v[6,index]=0.0 ;
return (0) ;
}
if (StopLoss != 0.0 )
Torgovlya_v[2,index]=NormalizeDouble(StopLoss,Digits) ;
if (TeikProfit != 0.0)
Torgovlya_v[3,index]=NormalizeDouble(TeikProfit,Digits) ;
return(0) ;
}
//=======================================================================
// Ôóíêöèÿ ïåðâîíà÷àëüíîé óñòàíîâêè âèðòóàëüíûõ îðäåðîâ
void OrderSend_v(double TorgOperation,double OpenPrice,double StopLoss,double TeikProfit,double FlagWork,double magic,double Pribil)
{
int index=index_v(magic) ;
//ïðîâåðêà íà âøèâîñòü óñòàíîâêè îðäåðà Buy
if (TorgOperation==0.0 && (TeikProfit!=0.0 && TeikProfit < OpenPrice) ||
(StopLoss!=0.0 && StopLoss > OpenPrice))
{
Print("Îøèáêà óñòàíîâêè îðäåðà Buy ñ ìàãèêîì ",magic);
deinit() ;
}
//ïðîâåðêà íà âøèâîñòü óñòàíîâêè îðäåðà Sell
if (TorgOperation==1.0 && (TeikProfit!=0 && TeikProfit > OpenPrice) ||
(StopLoss!=0.0 && StopLoss < OpenPrice))
{
Print("Îøèáêà óñòàíîâêè îðäåðà Sell ñ ìàãèêîì ",magic);
deinit() ;
}
//ïðîâåðêà íà âøèâîñòü óñòàíîâêè îðäåðà BuyLimit
if (TorgOperation==2.0 && (Ask < OpenPrice ||
(TeikProfit!=0.0 && TeikProfit < OpenPrice) ||
(StopLoss!=0.0 && StopLoss > OpenPrice)))
{
Print("Îøèáêà óñòàíîâêè îðäåðà BuyLimit ñ ìàãèêîì ",magic);
deinit() ;
}
//ïðîâåðêà íà âøèâîñòü óñòàíîâêè îðäåðà SellLimit
if (TorgOperation==3.0 && (Bid > OpenPrice ||
(TeikProfit!=0.0 && TeikProfit > OpenPrice) ||
(StopLoss!=0.0 && StopLoss < OpenPrice)))
{
Print("Îøèáêà óñòàíîâêè îðäåðà SellLimit ñ ìàãèêîì ",magic);
deinit() ;
}
//ïðîâåðêà íà âøèâîñòü óñòàíîâêè îðäåðà BuyStop
if (TorgOperation==4.0 && (Ask > OpenPrice ||
(TeikProfit!=0.0 && TeikProfit < OpenPrice) ||
(StopLoss!=0.0 && StopLoss > OpenPrice)))
{
Print("Îøèáêà óñòàíîâêè îðäåðà BuyStop ñ ìàãèêîì ",magic);
deinit() ;
}
//ïðîâåðêà íà âøèâîñòü óñòàíîâêè îðäåðà SellStop
if (TorgOperation==5.0 && (Bid < OpenPrice ||
(TeikProfit!=0.0 && TeikProfit > OpenPrice) ||
(StopLoss!=0.0 && StopLoss < OpenPrice)))
{
Print("Îøèáêà óñòàíîâêè îðäåðà SellStop ñ ìàãèêîì ",magic);
deinit() ;
}
Torgovlya_v[0,index]=TorgOperation ;
Torgovlya_v[1,index]=OpenPrice ;
Torgovlya_v[2,index]=StopLoss ;
Torgovlya_v[3,index]=TeikProfit ;
Torgovlya_v[4,index]=0.0 ;
Torgovlya_v[5,index]=magic ;
Torgovlya_v[6,index]=0.0 ;
return (0) ;
}
//==============================================================================================
void Vedeniepozi()
{
//ôóíêöèÿ êîòîðàÿ ïðîáåãàåò ïî ìàññèâó ïîçèöèé , çàêðûâàåò ïîçû ïî òåéêó èëè ñòîïó ,ïåðåâîäèò îòëîæåííûå îðäåðà â
// ñðàáîòàâøèå çàïèñûâàåò â ñîîòâåòñòâóþùóþ ÿ÷åéêó ïðèáûëü/ óáûòîê è óñòàíàâëèâàåò ôëàãè äëÿ óïðàâëåíèÿ ïîçèöèÿìè
for(int index=0 ;index<=643 ; index++)
{
//Ïîçèöèÿ Buy òîëüêî ÷òî óñòàíîâëåíà íåîáõîäèìî ñîâåðøèòü ïîêóïêó ïî òåêóùåìó Ask
if (Torgovlya_v[0,index]==0.0 && Torgovlya_v[4,index]==0.0)
{
Torgovlya_v[1,index]=Ask ;
Torgovlya_v[4,index]=1.0 ;
continue ;
}
//Ïîçèöèÿ Sell òîëüêî ÷òî óñòàíîâëåíà íåîáõîäèìî ñîâåðøèòü ïðîäàæó ïî òåêóùåìó Bid
if (Torgovlya_v[0,index]==1.0 && Torgovlya_v[4,index]==0.0)
{
Torgovlya_v[1,index]=Bid ;
Torgovlya_v[4,index]=1.0 ;
continue ;
}
//Ïîçèöèÿ Buy àêòèâíà íåîáõîäèìî åå ïðîâåðèòü íà ñòîïû è ïðîôèò
// ïðîâåðêà íà ïðîôèò
if(Torgovlya_v[0,index]==0.0 && Torgovlya_v[4,index]==1.0 && Torgovlya_v[3,index]!=0.0 &&
Bid > Torgovlya_v[3,index])
{
Torgovlya_v[6,index]=Torgovlya_v[3,index]-Torgovlya_v[1,index] ;
Torgovlya_v[4,index]=2.0 ;
continue ;
}
// ïðîâåðêà íà ñòîï
if(Torgovlya_v[0,index]==0.0 && Torgovlya_v[4,index]==1.0 && Torgovlya_v[2,index]!=0.0 &&
Bid < Torgovlya_v[2,index])
{
Torgovlya_v[6,index]=Torgovlya_v[2,index]-Torgovlya_v[1,index] ;
Torgovlya_v[4,index]=2.0 ;
continue ;
}
//Ïîçèöèÿ Sell àêòèâíà íåîáõîäèìî åå ïðîâåðèòü íà ñòîïû è ïðîôèò
// ïðîâåðêà íà ïðîôèò
if(Torgovlya_v[0,index]==1.0 && Torgovlya_v[4,index]==1.0 && Torgovlya_v[3,index]!=0.0 &&
Ask < Torgovlya_v[3,index] )
{
Torgovlya_v[6,index]=Torgovlya_v[1,index]-Torgovlya_v[3,index] ;
Torgovlya_v[4,index]=2.0 ;
continue ;
}
// ïðîâåðêà íà ñòîï
if(Torgovlya_v[0,index]==1.0 && Torgovlya_v[4,index]==1.0 && Torgovlya_v[2,index]!=0.0 &&
Ask > Torgovlya_v[2,index] )
{
Torgovlya_v[6,index]=Torgovlya_v[1,index]-Torgovlya_v[2,index] ;
Torgovlya_v[4,index]=2.0 ;
continue ;
}
//Ïðîâåðêà îòëîæåííûé îðäåð BuyLimit ñðàáîòàë ñòàë îðäåðîì Buy
if (Torgovlya_v[0,index]==2.0 && Ask < Torgovlya_v[1,index] &&
Torgovlya_v[4,index]!=2.0 )
{
Torgovlya_v[0,index]=0.0 ;
Torgovlya_v[4,index]=1.0 ;
continue ;
}
//Ïðîâåðêà îòëîæåííûé îðäåð BuyStop ñðàáîòàë ñòàë îðäåðîì Buy
if (Torgovlya_v[0,index]==4.0 && Ask > Torgovlya_v[1,index] &&
Torgovlya_v[4,index]!=2.0 )
{
Torgovlya_v[0,index]=0.0 ;
Torgovlya_v[4,index]=1.0 ;
continue ;
}
//Ïðîâåðêà îòëîæåííûé îðäåð SellLimit ñðàáîòàë ñòàë îðäåðîì Sell
if (Torgovlya_v[0,index]==3.0 && Bid > Torgovlya_v[1,index] &&
Torgovlya_v[4,index]!=2.0 )
{
Torgovlya_v[0,index]=1.0 ;
Torgovlya_v[4,index]=1.0 ;
continue ;
}
//Ïðîâåðêà îòëîæåííûé îðäåð SellStop ñðàáîòàë ñòàë îðäåðîì Sell
if (Torgovlya_v[0,index]==5.0 && Bid < Torgovlya_v[1,index] &&
Torgovlya_v[4,index]!=2.0 )
{
Torgovlya_v[0,index]=1.0 ;
Torgovlya_v[4,index]=1.0 ;
continue ;
}
}
//}
return(0) ;
}
//===============================================================================
int TipeOrder_v(int magic) // âîçâðàùàåò òèï âèðòóàëüíîãî îðäåðà ïî åãî ìàãèêó
{
int index=index_v(magic) ;
if (Torgovlya_v[0,index]==0.0) return(0) ;
if (Torgovlya_v[0,index]==1.0) return(1) ;
if (Torgovlya_v[0,index]==2.0) return(2) ;
if (Torgovlya_v[0,index]==3.0) return(3) ;
if (Torgovlya_v[0,index]==4.0) return(4) ;
if (Torgovlya_v[0,index]==5.0) return(5) ;
return(-1);
}
//================================================================================
void OrderClose_v(int magic) //ôóíêöèÿ çàêðûâàåò ïîçèöèþ ïî ðûíêó åñëè
//ïîçà îòëîæåííàÿ òî ïðîñòî óäàëÿåò îðäåð .
{
int index=index_v(magic) ;
if (TipeOrder_v(magic) >1 )
{ //îòëîæåííûé îðäåð îáíóëÿåì ÿ÷åéêó
Torgovlya_v[4,index]=-2.0 ;
}
// îðäåðà è òàê íåò ,íà õðåí ýòà çàïèñü íå çíàþ
if (TipeOrder_v(magic) ==-1 )
return(0) ;
// äåéñòâóþùèé Buy îðäåð
if (TipeOrder_v(magic) ==0 )
{
Torgovlya_v[6,index]=Bid-Torgovlya_v[1,index] ;
Torgovlya_v[4,index]=2.0 ;
return(0) ;
}
//Äåéñòâóþùèé Sell îðäåð
if (TipeOrder_v(magic) ==1 )
{
Torgovlya_v[6,index]=Torgovlya_v[1,index]-Ask ;
Torgovlya_v[4,index]=2.0 ;
return(0) ;
}
return(0) ;
}
//===============================================================================
void ResTorgovlya_v()
//Ôóíêöèÿ ïðîáåãàåò ïî âñåìó ìàññèâó îðäåðîâ è åñëè åñòü çàêðûòûå (îòðàáîòàííûå)
// îðäåðà ïðèáûëü/óáûòîê çàïèñûâàåòñÿ â ñîîòâåòñâóþùóþ ÿ÷åéêó â ìàññèâ òîðãîâëè
// ïîñëå ýòîãî î÷èùàåò ÿ÷åéêó îðäåðà ðàñ÷èòûâàåò ìàò îæèäàíèå ïî 10 ïîñëåäíèì ñäåëêàì
//çàïîëíÿåò ñîîòâ ÿ÷åéêó ìàññèâà ExpectPayoff
{
int aaa ,ProfitTrades,LossTrades ,k ;
double res ,GrossProfit,GrossLoss,ExpPayof;
for (int i=0 ; i<=643 ; i++)
{
if (Torgovlya_v[4,i]==2.0 && Torgovlya_v[6,i]!=0.0)
{
aaa=SvobodYacheyca_v(i) ;
Resultat_v[aaa,i]=Torgovlya_v[6,i] ;
if ( aaa > 10 )// åñëè çàïîëíÿåìàÿ ÿ÷åéêà â ìàññèâå ðåçóëüòàòîâ èìååò èíäåêñ áîëüøå 10 ðàñ÷èòûâàì ìàò îæèäàíèå äëÿ ýòîé ñòðàòåãèè
{
for (int j=aaa-10 ;j<=aaa ; j++)
{
if (Resultat_v[j,i] > 0.0)
{
GrossProfit=GrossProfit + Resultat_v[j,i];
ProfitTrades++;
}
else
{
LossTrades++;
GrossLoss=GrossLoss+Resultat_v[j,i];
}
}
ExpectPayoff[i]=ProfitTrades / 10 * GrossProfit - LossTrades / 10 * GrossLoss;
}
ProfitTrades=0; GrossProfit=0.0 ; LossTrades=0 ; GrossLoss=0.0 ;
Torgovlya_v[0,i]=-1.0 ;
for ( k=1 ;k<=6 ;k++)
Torgovlya_v[k,i]=0.0;
}
if (Torgovlya_v[4,i]==2.0 && Torgovlya_v[6,i]==0.0)
{
Torgovlya_v[0,i]=-1.0 ;
for ( k=1 ;k<=6 ;k++)
Torgovlya_v[k,i]=0.0;
}
}
return (0) ;
}
//==============================================================================
int SvobodYacheyca_v(int i)
//ôóíêöèÿ âîçâðàùàåò èíäåêñ ñâîáîäíîé ÿ÷åéêè â ìàññèâå ðåçóëüòàòîâ
{
for (int j=0; j<=255 ; j++)
{
if ( Resultat_v[j,i]==0.0 )
{ return(j); }
if( j==255 && Resultat_v[j,i]!=0.0 )
{ // åñëè âåñü ìàññèâ çàïîëíåí ñäâèãàåì âëåâî ñ ïîòåðåé ñàìîãî ñòàðøåãî ðåçóëüòàòà
for( int k=1 ; k<=255 ; k++)
{ Resultat_v[k-1,i]=Resultat_v[k,i] ; }
}
}
return(255) ;
}
//=============================================================================
int Expected_Payoff_v()
//ôóíêöèÿ âîçâðàùàåò èíäåêñ ñòðàòåãèè ñ ìàêñèìàëüíûì ïîëîæèòåëüíûì ìàò îæèäàíèåì äëÿ çàêëþ÷åíèÿ ðåàëüíûõ ñäåëîê
// åñëè òàêîé ñòðàòåãèè íåò âîçâðàùàåò -1
{
int bbb=-1;
double aaa=0.0;
for (int i=0 ;i<= 643 ; i++)
if ( ExpectPayoff[i]> aaa && (Torgovlya_v[0,i] >= 0)) // || Torgovlya_v[0,i] == 1))
{
aaa=ExpectPayoff[i];
bbb=i ;
}
return(bbb);
}
//=============================================================================
double OrderOpenPrice_v(int magic)
//Ôóíêöèÿ âîçâðàùàåò çíà÷åíèå öåíû îòêðûòèÿ âûáðàííîé ïîçèöèè
{
int index=index_v(magic) ;
return (Torgovlya_v[1,index]);
}
//=============================================================================
double OrderStopLoss_v(int magic)
//ôóíêöèÿ âîçâðàùàåò çíà÷åíèå ñòîï ëîñà âûáðàííîé ïîçèöèè
{
int index=index_v(magic) ;
return (Torgovlya_v[2,index]);
}
/*
Expected payoff, ìàòåìàòè÷åñêîå îæèäàíèå âûèãðûøà ðàññ÷èòûâàåòñÿ ïî ñëåäóþùåé ôîðìóëå:
Expected Payoff = (ProfitTrades / TotalTrades) * (GrossProfit / ProfitTrades) - (LossTrades / TotalTrades) * (GrossLoss / LossTrades)ãäå:
TotalTrades - îáùåå êîëè÷åñòâî ñäåëîê;
ProfitTrades - êîëè÷åñòâî ïðèáûëüíûõ ñäåëîê;
LossTrades - êîëè÷åñòâî óáûòî÷íûõ ñäåëîê;
GrossProfit - îáùàÿ ïðèáûëü;
GrossLoss - îáùèé óáûòîê.
ExpectPayoff
*/
//====================================================================================================
int Type_Order_r(int Magic)
//Ôóíêöèÿ âîçâðàùàåò òèï îðäåðà ðåàëüíîé ïîçèöèè ïî åãî ìàãèêó
{
int pos ,ticket;
int total=OrdersTotal();
for (pos=0;pos<total;pos++)
{
if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderMagicNumber()!=Magic) continue ;//âûáðàííûé îðäåð íå íàø
ticket=OrderTicket();
if (OrderType()==OP_BUY) return(0) ;
if (OrderType()==OP_SELL) return(1) ;
if (OrderType()==OP_BUYLIMIT) return(2) ;
if (OrderType()==OP_SELLLIMIT) return(3) ;
if (OrderType()==OP_BUYSTOP) return(4) ;
if (OrderType()==OP_SELLSTOP) return(5) ;
}
else Print("Îøèáêà â ôóíêöèè Type_Order_r ",GetLastError());
}
return(-1);
}
//===============================================================================================
void Copy_Position_r( int index ,int magic)
{
//Ôóíêöèÿ êîïèðîâàíèÿ âèðòóàëüíîãî îðäåðà â ðåàëüíûé çäåñü index èíäåêñ ðàáî÷åé ñòðàòåãèè
// õàðàêòåðèñòèêè îðäåðà áåðóòñÿ èç ìàññèâà Torgovlya_v , Magic ýòî ìàãèê êîòîðûé íóæíî ïðèñâîèòü ðåàëüíîìó îðäåðó
double teik_profit ;
double stopp_loss ;
double open_price;
double stop_level=MarketInfo(Symbol(),MODE_STOPLEVEL) ;
double bbb=7* Point;
int operation ;
operation = Torgovlya_v[0,index] ;
teik_profit=Torgovlya_v[3,index] ;
stopp_loss=Torgovlya_v[2,index] ;
open_price=Torgovlya_v[1,index];
if (Digits == 5 || Digits ==3 )
{
bbb=bbb*10 ;
}
// åñëè òèï âèðòóàëüíîãî îðäåðà íå ðàâåí òèïó ðåàëüíîãî îðäåðà òî ðåàëüíûé îðäåð óäàëÿåì
//Print("ìàãèê ,òåéê ïðîôèò, ñòîï ,îòêðûòèå, îïåðàöèÿ ",magic," ",teik_profit," ",stopp_loss," ",open_price," ",operation);
//Print("",) ;
int aaa=Type_Order_r(magic) ;
if (operation!=aaa && aaa>=0)
{
Delete_Position_r(index,magic) ;
return(0) ;
}
// âûáèðàåì îðäåð ñ ìàãèêîì magic äëÿ äàëüíåéøèõ îïåðàöèé ïîòðåáóåòñÿ åãî ticket
int pos ,ticket=-1;
int total=OrdersTotal();
for (pos=0;pos<total;pos++)
{
if(OrderMagicNumber() != magic) continue ;//âûáðàííûé îðäåð íå íàø
ticket=OrderTicket();
break ;
}
if ( ticket!=-1)
// òåïåðü çíàåì ìàãèê îðäåðà è åãî òèêåò è âûáðàëè òî÷íî òî ÷òî íàì íóæíî
OrderSelect(ticket,SELECT_BY_TICKET) ;
//Print("äîáðàëèñü äî óñòàíîâêè ïîçèöèè ñ èíäåêñîì ",index) ;
// âû÷èñëÿåì øàã ìîäèôèêàöèè ÷òîáû íå äåðãàòüñÿ ïî êàæäîìó òèêó
switch ( operation )
{
// ðàáîòàåì ñ ðåàëüíûì îðäåðîì íà ïîêóïêó ñðàâíèâàåì åãî ïðîôèò ,ëîññ è ïðè íåîáõîäèìîñòè ìîäèôèöèðóåì
case 0:
// åñëè íåò ðåàëüíîãî îðäåðà íà ïîêóïêó óñòàíàâëèâàåì åãî
if ( aaa == -1 && MathAbs(Ask- open_price) < bbb)
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,50,stopp_loss,teik_profit,0,magic,0,CLR_NONE);
if (ticket==-1)
Print("îøèáêà îòêðûòèÿ îðäåðà íà ïîêóïêó ",GetLastError()) ;
break;
}
if(stopp_loss!=OrderStopLoss() && stopp_loss!=0.0 && MathAbs(Bid-OrderStopLoss()) > stop_level)
{
if (OrderModify(ticket,0,stopp_loss,0,0,CLR_NONE)== false)
{
Print ("îøèáêà ìîäèôèêàöèè ëèíèÿ 2 ",GetLastError()) ;
Print("Âèðòóàëüíûé ñòîï ëîññ= ",stopp_loss," Ðåàëüíàÿ öåíà ïðåäëîæåíèÿ= ",Bid) ;
}
}
break ;
// òî æå ñàìîå äëÿ îðäåðà íà ïðîäàæó
case 1:
if ( aaa == -1 && MathAbs(Bid - open_price)< bbb)
{
ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,50,stopp_loss,teik_profit,0,magic,0,CLR_NONE);
if (ticket == -1)
Print("îøèáêà îòêðûòèÿ îðäåðà íà ïðîäàæó ",GetLastError()) ;
break;
}
if(stopp_loss!=OrderStopLoss() && stopp_loss!=0.0 && MathAbs(Ask-OrderStopLoss()) > stop_level)
{
if (OrderModify(ticket,0,stopp_loss,0,0,CLR_NONE)== false)
{
Print ("îøèáêà ìîäèôèêàöèè ëèíèÿ 4 ",GetLastError()) ;
Print("Âèðòóàëüíûé ñòîï ëîññ= ",stopp_loss," Ðåàëüíàÿ öåíà ñïðîñà= ",Bid) ;
}
}
break ;
case 2:
//äëÿ îðäåðà Buy_Limit üîäèôèêàöèÿ åñëè èçìåíèëñÿ óðîâåíü îòêðûòèÿ öåíû äëÿ ëèìèòíèêîâ âñå îäèíàêîâîå
if (aaa == -1)
{
OrderSend(Symbol(),OP_BUYLIMIT,Lot,open_price,0,stopp_loss,teik_profit,0,magic,0,CLR_NONE);
Print("óñòàíàâëèâàåì BUYLIMIT") ;
break ;
}
if (open_price != OrderOpenPrice() && MathAbs(Ask-OrderOpenPrice()) > stop_level)
{
if (OrderModify(ticket,open_price,stopp_loss,teik_profit,0,CLR_NONE)==false )
Print ("îøèáêà ìîäèôèêàöèè ëèíèÿ 5 ",GetLastError()) ;
}
break ;
case 3:
if (aaa == -1)
{
OrderSend(Symbol(),OP_SELLLIMIT,Lot,open_price,0,stopp_loss,teik_profit,0,magic,0,CLR_NONE);
Print("óñòàíàâëèâàåì SELLLIMIT") ;
break ;
}
if (open_price != OrderOpenPrice() && MathAbs(Bid-OrderOpenPrice()) > stop_level)
{
if (OrderModify(ticket,open_price,stopp_loss,teik_profit,0,CLR_NONE)==false )
Print ("îøèáêà ìîäèôèêàöèè ëèíèÿ 6 ",GetLastError()) ;
}
break ;
case 4:
if (aaa == -1)
{
OrderSend(Symbol(),OP_BUYSTOP,Lot,open_price,0,stopp_loss,teik_profit,0,magic,0,CLR_NONE);
Print("óñòàíàâëèâàåì BUYSTOP") ;
break ;
}
if (open_price != OrderOpenPrice() && MathAbs(Ask-OrderOpenPrice()) > stop_level)
{
if (OrderModify(ticket,open_price,stopp_loss,teik_profit,0,CLR_NONE)==false )
Print ("îøèáêà ìîäèôèêàöèè ëèíèÿ 7 ",GetLastError()) ;
}
break ;
case 5:
if (aaa == -1)
{
OrderSend(Symbol(),OP_SELLSTOP,Lot,open_price,0,stopp_loss,teik_profit,0,magic,0,CLR_NONE);
Print("óñòàíàâëèâàåì SELLSTOP") ;
break ;
}
if (open_price != OrderOpenPrice() && MathAbs(Bid-OrderOpenPrice()) > stop_level)
{
if (OrderModify(ticket,open_price,stopp_loss,teik_profit,0,CLR_NONE)==false )
Print ("îøèáêà ìîäèôèêàöèè ëèíèÿ 8 ",GetLastError()) ;
}
break ;
}
return(0) ;
}
//=========================================================================================================
void Delete_Position_r(int index,int magic)
{
// Ôóíêöèÿ óäàëåíèÿ îðäåðîâ ðåàëüíûõ ïîçèöèé åñëè îðäåð îòëîæåííûé òî îí ïðîñòî óäàëÿåòñÿ
// åñëè ñðàáîòàâøèé òî çàêðûâàåòñÿ ïî ðûíêó .
int operation ;
operation=Type_Order_r(magic) ;
int pos ,ticket;
int total=OrdersTotal();
for (pos=0;pos<total;pos++)
{
if(OrderMagicNumber() != magic) continue ;//âûáðàííûé îðäåð íå íàø
ticket=OrderTicket();
break ;
}
if ( operation > 1)
{
OrderDelete(ticket) ;
return(0) ;
}
if (operation == 0)
{
OrderClose(ticket,Lot,Bid,50,CLR_NONE) ;
return(0) ;
}
if (operation ==1)
{
OrderClose(ticket,Lot,Ask,50,CLR_NONE) ;
return(0) ;
}
return(0) ;
}
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
---