Orders Execution
0
Views
0
Downloads
0
Favorites
CanalTrenager
//+------------------------------------------------------------------+
//| CanalTrenager.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//---- input parameters
extern double Risk=3;
//extern double HandRisk=3
extern int Magic=22;
extern double Lot=0.1 ;
extern double HandLot=0.5 ;
//---------------------------------------------------------------------
int FSize=14;//ïàðàìåòðû ïàíåëè
color NClr1=Blue;
int NomX=160,PYL=2,LossX=115,ProfitX=80,DirX=45,TrallX=10; // øàïêà íàçâàíèé ñòîëáöîâ êîîðäèíàòû
int Pos0X=165,Pos0Y=23,Loss0X=115,Profit0X=80,Dir0X=45,Trall0X=10 ;// ïåðâàÿ ñòðîêà òàáëèöû
int ChangeX=80,ChangeY=400 ;//êîîðäèíàòû äëÿ ñòðîêè èçìåíåíèÿ ïðèíÿòû
int Change=0 ; // ñ÷åò÷èê òèêîâ â òå÷åíèè êîòîðûõ áóäåò âèñåòü ñòðîêà èçìåíåíèÿ ïðèíÿòû
int LotX=90,LotY=300 ;//êîîðäèíàòû äëÿ ëàáåë ëîò
string Pr="Training ";
int K=1 ; // êîýôôèöèåíò äëÿ ïÿòèçíàêà
int VedPos[10] ; //ìàññèâ îðäåðîâ â òàáëèöå äëÿ ñîðòèðîâêè
int StopLoss[10];//ìàññèâ äëÿ ó÷åòà âåäåíèÿ ñòîïîâ íà êàêîì ðàññòîÿíèè âûñòàâèòü ñòîï îò òåê öåíû
int TeikProfit[10];//ìàññèâ äëÿ ó÷åòà âåäåíèÿ ïðîôèòîâ íà êàêîì ðàññòîÿíèè âûñòàâèòü ïðîôèò îò òåê öåíû
int Direction[10];//ìàññèâ äëÿ ó÷åòà íàïðàâëåíèÿ ïîçèöèå ëèìèò åñëè=1 , ñòîï åñëè =0
int Tralling[10];//ìàññèâ äëÿ óòåòà âåäåíèÿ òðàëà ==1 òðàë ðàçðåøåí =0 òðàë çàïðåùåí
bool FistModifi[10];// ìàññèâ äëÿ ó÷åòà ïåðâîé ìîäèôèêàöèè îðäåðà
//=====================================================================
int init()
{
if (Digits==5 || Digits==3 ) K=10 ;//êîýôôèöèåíò äëÿ ïÿòèçíàêà
// ðèñóåì òàáëèöó
InitVedPos () ;
FirstTabl() ;
TablPos() ;
// ðèñóåì ëèíèè ïîääåðæêè ñîïðîòèëåíèÿ
DrawLine(Pr+"UpLine",Ask+10*K*Point,Red,0) ;
DrawLine(Pr+"DownLine",Ask-10*K*Point,Blue,0) ;
return(0);
}
//======================================================================
void FirstTabl()
{// ïåðâîíà÷àëüíî çàïîëíÿåòñÿ òàáëèöà
int Win=0 ,i,j,k,Error,pos;
string aaa ;
double SL,TP,Dir,Trall=1;
DrawLabels(Pr+"Nom", 1, NomX, PYL, "Nn/n", NClr1,0);
DrawLabels(Pr+"Loss", 1,LossX, PYL, "SL", NClr1,0);
DrawLabels(Pr+"Profit", 1,ProfitX, PYL, "TP", NClr1,0);
DrawLabels(Pr+"Dir", 1,DirX, PYL, "Dir", NClr1,0);
DrawLabels(Pr+"Trall", 1,TrallX, PYL, "Trall", NClr1,0);
DrawLabels(Pr+"Lot", 1,LotX,LotY, "Lot", Red,0,16);
DrawLabels(Pr+"LotChange", 1,LotX-50,LotY, DoubleToStr(Lot,2), Red,0,16);
//----------------------------------------------------------------------------------------------
for (i=0;i<=9 ;i++)
{
aaa=DoubleToStr(i,0) ;
Error=ObjectFind(Pr+"stroka"+aaa+"0");// Çàïðîñ
if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò
{// òî ìû åãî ñîçäàåì óñòàíàâëèâàåì ëàáåë â ñîîòâåòñòâèè ñ îòêðûòûìè ïîçèöèÿìè
if (VedPos[i] < 0) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X, Pos0Y+i*23, aaa, NClr1,0);
if (VedPos[i] > 1) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, aaa, NClr1,0);
if (VedPos[i] ==0) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, "Buy", Red,0);
if (VedPos[i] ==1) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, "Sell", Green,0);
}
}
//----------------------------------------------------------------------------------------------
for (i=0; i<=9 ;i++)
{// çäåñü ïåðâîíà÷àëüíî çàïîëíÿþòÿ ñòîï ëîñè îòêðûòûòõ èëè âûñòàâëåííûõ ïîçèöèé
aaa=DoubleToStr(i,0) ;
SL=0;
Error=ObjectFind(Pr+"stroka"+aaa+"1");// Çàïðîñ
if (Error!=Win)// Åñëè ëàáåë ñòîï ëîññà íåò òî ñîçäàåì åãî çàïîëíÿåì =SL ïåðâîíà÷àëüíî
{// òî ìû åãî ñîçäàåì óñòàíàâëèâàåì ëàáåë â ñîîòâåòñòâèè ñ îòêðûòûìè ïîçèöèÿìè
for (pos=OrdersTotal()-1; pos>=0 ;pos--)
{// â ýòîì öèêëå èùåòñÿ ñòîï ëîññ â ñîîòâåòñòâèè ñ ïîçèöèåé
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()!=Symbol() ) continue;
if(Magic != ReturnMagic(pos) ) continue ;
if (i!=ReturnPosition(pos) ) continue;
//SL=ReturnSL(pos);
}
DrawLabels(Pr+"stroka"+aaa+"1", 1, Pos0X-55, Pos0Y+i*23, DoubleToStr(SL,0), NClr1,0);
}
}
//-----------------------------------------------------------------------------------------------
for (i=0; i<=9 ;i++)
{// çäåñü ïåðâîíà÷àëüíî çàïîëíÿþòÿ òåéê ïðîôèòû îòêðûòûõ èëè âûñòàâëåííûõ ïîçèöèé
aaa=DoubleToStr(i,0) ;
TP=0 ;
Error=ObjectFind(Pr+"stroka"+aaa+"2");// Çàïðîñ
if (Error!=Win)// Åñëè ëàáåë òåéê ïðîôèòà íåò òî ñîçäàåì åãî çàïîëíÿåì =TP ïåðâîíà÷àëüíî
{// òî ìû åãî ñîçäàåì óñòàíàâëèâàåì ëàáåë â ñîîòâåòñòâèè ñ îòêðûòûìè ïîçèöèÿìè
for (pos=OrdersTotal()-1; pos>=0 ;pos--)
{// â ýòîì öèêëå èùåòñÿ ñòîï ëîññ â ñîîòâåòñòâèè ñ ïîçèöèåé
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()!=Symbol() ) continue;
if(Magic != ReturnMagic(pos) ) continue ;
if (i!=ReturnPosition(pos) ) continue;
//SL=ReturnTP(pos);
}
DrawLabels(Pr+"stroka"+aaa+"2", 1, Pos0X-90, Pos0Y+i*23, DoubleToStr(TP,0), NClr1,0);
}
}
//-------------------------------------------------------------------------------------------------
for (i=0; i<=9 ;i++)
{// çäåñü ïåðâîíà÷àëüíî çàïîëíÿþòÿ Dir íàïðàâëåíèå âûñòàâëåííûõ îðäåðîâ Îòëîæåííûé îðäåð BUY LIMIT
// SELL LIMIT åñëè Dir=1. Îòëîæåííûé îðäåð BUY STOP SELL STOP åñëè Dir=0
aaa=DoubleToStr(i,0) ;
Dir=0 ;
Error=ObjectFind(Pr+"stroka"+aaa+"3");// Çàïðîñ
if (Error!=Win)// Åñëè ëàáåë òåéê ïðîôèòà íåò òî ñîçäàåì åãî çàïîëíÿåì =Dir ïåðâîíà÷àëüíî
{// òî ìû åãî ñîçäàåì óñòàíàâëèâàåì ëàáåë â ñîîòâåòñòâèè ñ îòêðûòûìè ïîçèöèÿìè
for (pos=OrdersTotal()-1; pos>=0 ;pos--)
{// â ýòîì öèêëå èùåòñÿ ñòîï ëîññ â ñîîòâåòñòâèè ñ ïîçèöèåé
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()!=Symbol() ) continue;
if(Magic != ReturnMagic(pos) ) continue ;
if (i!=ReturnPosition(pos) ) continue;
//Dir=ReturnDir(pos);
}
DrawLabels(Pr+"stroka"+aaa+"3", 1, Pos0X-115, Pos0Y+i*23, DoubleToStr(Dir,0), NClr1,0);
}
}
//---------------------------------------------------------------------------------------------------
for (i=0; i<=9 ;i++)
{// çäåñü ïåðâîíà÷àëüíî çàïîëíÿþòÿ ôëàã Trall ðàçðåøàþùèé òðàëë ïîçèöèé
// òðàë ïðèìåíÿåòñÿ â ñòàíäàðòíîì âàðèàíòå ,åñëè òåêóùàÿ ïðèáûëü áîëüøå ÷åì ñòîï ëîññ
// òî ïåðâûé ñòîï ëîññ ïåðåíîñèòñÿ íà óðîâåíü áåçóáûòêà + 2 ïóíêòà äàëüøå òðàëë ÷åðåç
// 5 ïóíêòîâ ïðèáûëè
aaa=DoubleToStr(i,0) ;
Trall=0 ;
Error=ObjectFind(Pr+"stroka"+aaa+"4");// Çàïðîñ
if (Error!=Win)// Åñëè ëàáåë Trall íåò òî ñîçäàåì åãî çàïîëíÿåì =TRall ïåðâîíà÷àëüíî
{// òî ìû åãî ñîçäàåì óñòàíàâëèâàåì ëàáåë â ñîîòâåòñòâèè ñ îòêðûòûìè ïîçèöèÿìè
for (pos=OrdersTotal()-1; pos>=0 ;pos--)
{// â ýòîì öèêëå èùåòñÿ ñòîï ëîññ â ñîîòâåòñòâèè ñ ïîçèöèåé
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()!=Symbol() ) continue;
if(Magic != ReturnMagic(pos) ) continue ;
if (i!=ReturnPosition(pos) ) continue;
//Trall=ReturnTrall(pos);
}
DrawLabels(Pr+"stroka"+aaa+"4", 1, Pos0X-145, Pos0Y+i*23, DoubleToStr(Trall,0), NClr1,0);
}
}
return(0) ;
}
//======================================================================
void InitVedPos ()
{// ôóíêöèÿ èíèöèàëèçèðóåò ìàññèâ äëÿ âåäåíèÿ ïîçèöèé -1 â òåêóùåé ïîçèöèè íåò îòêðûòûõ èëè îòëîæåííûõ îðäåðîâ
//è óäàëÿåò îòëîæåííûå îðäåðà åñëè íà ïðîòèâîïîëîæíîé ñòîðîíå îðäåð ñðàáîòàë
int position ;//íîìåð ïîçû â ñïèñêå
ArrayInitialize(VedPos,-1) ;
for (int pos=OrdersTotal()-1; pos>=0 ;pos--)
{// â ýòîì öèêëå çàïîëíÿåòñÿ ìàññèâ VedPos
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()!=Symbol() ) continue;
if(Magic != ReturnMagic(pos) ) continue ;
position=ReturnPosition(pos) ;
if (OrderType() >1 && (VedPos[position]==1 ||VedPos[position]==0)) continue ;
VedPos[position]=OrderType() ;
}
for (int i=0; i<=9 ;i++)
{// â ýòîì öèêëå ïðîâåðÿåòñÿ ìàññèâ VedPos íà ïðåäìåò ñðàáîòàâøèõ îðäåðîâ
if (VedPos[i]==0 || VedPos[i]==1 )
{
for ( pos=OrdersTotal()-1; pos>=0 ;pos--)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()!=Symbol() ) continue;
if(Magic != ReturnMagic(pos) ) continue ;
position=ReturnPosition(pos) ;
if (position == i && OrderType()>1 ) OrderDelete(OrderTicket()) ;
// è åñëè åñòü âñòðå÷íûå îòëîæåííûå îðäåðà òî îíè óäàëÿþòñÿ
}
}
}
return(0) ;
}
//====================================================================
int ReturnMagic(int posa)
{// âîçâðàùàåò ìàãèê âûáðàííîãî îðäåðà
int mag ;//ìàãèê âûáðàííîãî îðäåðà
mag=OrderMagicNumber()/10000000 ;
if (mag > 100) mag-=100 ;
return(mag);
}
//====================================================================
int ReturnPosition(int posa)
{//âîçâðàùàåò íîìåð ïîçèöèè â âñïèñêå
int posret,aaa ;
aaa=OrderMagicNumber()/10 ;
posret=OrderMagicNumber()-aaa*10 ;
return (posret) ;
}
//====================================================================
void TablPos ()
{
int Win=0 ,i,j,k,Error,pos,bbb;
string aaa ;
double SL=0,TP=0,Dir=1,Trall=1;
DrawLabels(Pr+"Nom", 1, NomX, PYL, "Nn/n", NClr1,0);
DrawLabels(Pr+"Loss", 1,LossX, PYL, "SL", NClr1,0);
DrawLabels(Pr+"Profit", 1,ProfitX, PYL, "TP", NClr1,0);
DrawLabels(Pr+"Dir", 1,DirX, PYL, "Dir", NClr1,0);
DrawLabels(Pr+"Trall", 1,TrallX, PYL, "Trall", NClr1,0);
for (i=0;i<=9 ;i++)
{
aaa=DoubleToStr(i,0) ;
if (VedPos[i] < 0) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X, Pos0Y+i*23, aaa, NClr1,0);
if (VedPos[i] > 1) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, aaa, NClr1,0);
if (VedPos[i] ==0) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, "Buy", Red,0);
if (VedPos[i] ==1) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, "Sell", Green,0);
// åñëè ñìåùàåì ëàáåë Nn/n âëåâî òî óñòàíàâëèâàåì îðäåð
if (VedPos[i] < 0 && ObjectGet(Pr+"stroka"+aaa+"0",OBJPROP_XDISTANCE) > Pos0X )
{
if (SendOrders(i)) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, aaa, NClr1,0);
DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
Change=0 ;
}
if (ObjectGet(Pr+"stroka"+aaa+"0",OBJPROP_XDISTANCE) < Pos0X )
{// åñëè âïðàâî çàêðûâàåì îðäåð
DelCloseOrders(i) ;
DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
Change=0 ;
DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X, Pos0Y+i*23, aaa, NClr1,0);
}
}
//----------------------------------------------------------------------------------------------
for (i=0; i<=9 ;i++)
{// çäåñü ïðîâåðÿåòñÿ ñìåùåíèå ëàáåë SL è åñëè îíà ñìåùåíà çíà÷åíèå çàïèñûâàåòñÿ â ìàññèâ
// StopLoss[10] äëÿ ïîñëåäóþùåé ìîäèôèêàöèè îðäåðà
aaa=DoubleToStr(i,0) ;
if (ObjectGet(Pr+"stroka"+aaa+"1",OBJPROP_XDISTANCE) != Pos0X-55 )
{//ñòðîêà ñìåùåíà íóæíî çàïîëíèòü ìàññèâ è ìîäèôèöèðîâàòü îðäåð
if(ObjectFind(Pr+"stroka"+aaa+"1")>-1)
StopLoss[i]=StrToInteger( ObjectDescription(Pr+"stroka"+aaa+"1") );
DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
Change=0 ;
//ìîäèôèöèðîâàòü îðäåð
}
DrawLabels(Pr+"stroka"+aaa+"1", 1, Pos0X-55, Pos0Y+i*23, "none", NClr1,0);
}
//-----------------------------------------------------------------------------------------------
for (i=0; i<=9 ;i++)
{// çäåñü ïðîâåðÿåòñÿ ñìåùåíèå ëàáåë TP è åñëè îíà ñìåùåíà çíà÷åíèå çàïèñûâàåòñÿ â ìàññèâ
// TeikProfit[10] äëÿ ïîñëåäóþùåé ìîäèôèêàöèè îðäåðà
aaa=DoubleToStr(i,0) ;
if (ObjectGet(Pr+"stroka"+aaa+"2",OBJPROP_XDISTANCE) != Pos0X-90 )
{//ñòðîêà ñìåùåíà íóæíî çàïîëíèòü ìàññèâ è ìîäèôèöèðîâàòü îðäåð
if(ObjectFind(Pr+"stroka"+aaa+"2")>-1)
TeikProfit[i]=StrToInteger( ObjectDescription(Pr+"stroka"+aaa+"2") );
DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
Change=0 ;
//ìîäèôèöèðîâàòü îðäåð
}
DrawLabels(Pr+"stroka"+aaa+"2", 1, Pos0X-90, Pos0Y+i*23, "none", NClr1,0);
}
//-------------------------------------------------------------------------------------------------
for (i=0; i<=9 ;i++)
{// çäåñü ïðîâåðÿåòñÿ ñìåùåíèå ëàáåë Dir è åñëè îíà ñìåùåíà çíà÷åíèå çàïèñûâàåòñÿ â ìàññèâ
// Direction[10] äëÿ ïîñëåäóþùåé ìîäèôèêàöèè îðäåðà
aaa=DoubleToStr(i,0) ;
if (ObjectGet(Pr+"stroka"+aaa+"3",OBJPROP_XDISTANCE) != Pos0X-115 )
{//ñòðîêà ñìåùåíà íóæíî çàïîëíèòü ìàññèâ è ìîäèôèöèðîâàòü îðäåð
if(ObjectFind(Pr+"stroka"+aaa+"3")>-1)
Direction[i]=StrToInteger( ObjectDescription(Pr+"stroka"+aaa+"3") );
DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
Change=0 ;
//ìîäèôèöèðîâàòü îðäåða
}
DrawLabels(Pr+"stroka"+aaa+"3", 1, Pos0X-115, Pos0Y+i*23, "none", NClr1,0);
}
//---------------------------------------------------------------------------------------------------
for (i=0; i<=9 ;i++)
{// çäåñü ïðîâåðÿåòñÿ ñìåùåíèå ëàáåë Trall è åñëè îíà ñìåùåíà çíà÷åíèå çàïèñûâàåòñÿ â ìàññèâ
// Tralling[10] äëÿ ïîñëåäóþùåé ìîäèôèêàöèè îðäåðà
aaa=DoubleToStr(i,0) ;
if (ObjectGet(Pr+"stroka"+aaa+"4",OBJPROP_XDISTANCE) != Pos0X-145 )
{//ñòðîêà ñìåùåíà íóæíî çàïîëíèòü ìàññèâ è ìîäèôèöèðîâàòü îðäåð
if(ObjectFind(Pr+"stroka"+aaa+"4")>-1)
Tralling[i]=StrToInteger( ObjectDescription(Pr+"stroka"+aaa+"4") );
DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
Change=0 ;
//ìîäèôèöèðîâàòü îðäåða
}
DrawLabels(Pr+"stroka"+aaa+"4", 1, Pos0X-145, Pos0Y+i*23, "none", NClr1,0);
}
return (0) ;
}
//====================================================================
int DrawLabels(string name, int corn, int X, int Y, string Text="none", color Clr=Green, int Win=0, int FSize=12)
{
int Error=ObjectFind(name);// Çàïðîñ
if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
{
ObjectCreate(name,OBJ_LABEL,Win, 0,0); // Ñîçäàíèå îáúåêòà
}
ObjectSet(name, OBJPROP_CORNER, corn); // Ïðèâÿçêà ê óãëó
ObjectSet(name, OBJPROP_XDISTANCE, X); // Êîîðäèíàòà Õ
ObjectSet(name,OBJPROP_YDISTANCE,Y);// Êîîðäèíàòà Y
if (Text!="none") ObjectSetText(name,Text,FSize,"Arial",Clr);
}
//=====================================================================
int MagicSend(int nambepos)
{// ôóíêöèÿ ðàñ÷èòûâàåò ìàãèê äëÿ óñòàíîâêè ïîçèöèè ,ìàãèê èìååò ñëîæíóþ ñòðóêòóðó
// äëÿ ñèíõðîíèçàöèè ñîâåòíèêà ñ ðàçíûõ òîðãîâûõ òåðìèíàëîâ ðàçðÿä 0- íîìåð îðäåðà ïî ïîðÿäêó
// ðàçðÿäû 1-3 ñòîï ëîññ ðàçðÿäû 4-6 òåéê ïðîôèò ,ðàçðÿäû 7-8 ìàãèê èç âõîäíûõ ïåðåìåííûõ
// ðàçðÿä 9 òðàë
int Nom,SL,TP,Mag,TR,Mg ;
Mg=nambepos+StopLoss[nambepos]*10+TeikProfit[nambepos]*10000+Magic*10000000+
Direction[nambepos]*1000000000 ;
return(Mg) ;
}
//=====================================================================
bool SendOrders (int nambepos)
{//ôóíêöèÿ âûñòàâëÿåòîðäåðà îòëîæåííèêè åñëè öåíà íèæå êðàñíîé ëèíèè è âûøå ñèíåé ñ íàïðàâëåíèåì
//ñîãëàñíî =Dir òëîæåííûé îðäåð BUY LIMIT
// SELL LIMIT åñëè Dir=1. Îòëîæåííûé îðäåð BUY STOP SELL STOP åñëè Dir=0
//ïîêóïàåì ïî ðûíêó åñëè öåíà âûøå êðàñíîé ëèíèè ïðîäàåì ïî ðûíêó åñëè íèæå ñèíåé
//åñëè öåíà âûøå êðàñíîé è íèæå ñèíåé îðäåð íå îòêðûâàåòñÿ â êîìåíòû âûâîäèòñÿ îøèáêà
double Up,Down ,SL,TP,Mg,Stop=0,Teik=0,Lotes;
//int Stop,Taik ;
Up=NormalizeDouble(ObjectGet(Pr+"UpLine",OBJPROP_PRICE1),Digits) ;
Down=NormalizeDouble(ObjectGet(Pr+"DownLine",OBJPROP_PRICE1),Digits) ;
if (Bid < Down && Bid > Up ) {Comment("Íå ïðàâèëüíî óñòàíîâëåíû ëèíèè ïîääåðæêè ñîïðîòèâëåíèÿ") ; return(false);}
Mg=MagicSend(nambepos) ;
if ( StopLoss[nambepos]== 0) SL=0 ;
else SL=NormalizeDouble(StopLoss[nambepos]*Point*K,Digits) ;
if ( TeikProfit[nambepos]== 0) TP=0 ;
else TP=NormalizeDouble(TeikProfit[nambepos]*Point*K,Digits) ;
//------------------------------------------------------------------------------------------
if (Bid > Down && Bid < Up )
{//óñòàíàâëèâàåì îòëîæåííûå îðäåðà
switch (Direction[nambepos])
{
case 1:// óñòàíàâëèâàåì ëèìèò îðäåðà ðàáîòà âíóòðü êàíàëà \
if ( TP!=0) Teik=Down+TP ;
if ( SL!=0) Stop=Down-SL ;
Lotes=LotSize( OP_BUY, Risk, StopLoss[nambepos]) ;
OrderSend(Symbol(),OP_BUYLIMIT,Lotes,Down,50,Stop,Teik,0,Mg,0,CLR_NONE) ;
Stop=0;Teik=0;
if ( TP!=0) Teik=Up-TP ;
if ( SL!=0) Stop=Up+SL ;
Lotes=LotSize( OP_SELL, Risk, StopLoss[nambepos]) ;
OrderSend(Symbol(),OP_SELLLIMIT,Lotes,Up,50,Stop,Teik,0,Mg,0,CLR_NONE) ;
break ;
case 0:// óñòàâëèâàåì ñòîï îðäåðà ðàáîòà íà ïðîáîé êàíàëà
if ( TP!=0) Teik=Up+TP ;
if ( SL!=0) Stop=Up-SL ;
Lotes=LotSize( OP_BUY, Risk, StopLoss[nambepos]) ;
OrderSend(Symbol(),OP_BUYSTOP,Lotes,Up,50,Stop,Teik,0,Mg,0,CLR_NONE);
Stop=0;Teik=0;
if ( TP!=0) Teik=Down-TP ;
if ( SL!=0) Stop=Down+SL ;
Lotes=LotSize( OP_SELL, Risk, StopLoss[nambepos]) ;
OrderSend(Symbol(),OP_SELLSTOP,Lotes,Down,50,Stop,Teik,0,Mg,0,CLR_NONE) ;
break ;
}
}
//------------------------------------------------------------------------------------------
if (Bid < Down && Bid < Up )
{// îòêðûâàåì Sell ïî ðûíêó
//Print(" Stop Loss= " ,StopLoss[nambepos]," TeikProfit= ",TeikProfit[nambepos] ) ;
if ( TP!=0) Teik=Bid-TP ;
if ( SL!=0) Stop=Bid+SL ;
Lotes=LotSize( OP_SELL, Risk, StopLoss[nambepos]) ;
if (OrderSend(Symbol(),OP_SELL,Lotes,Bid,50,Stop,Teik,0,Mg,0,CLR_NONE) < 0) return(false) ;
}
//------------------------------------------------------------------------------------------
if (Bid > Down && Bid > Up )
{//îòêðûâàåì Buy ïî ðûíêó
//Print(" Stop Loss= " ,StopLoss[nambepos]," TeikProfit= ",TeikProfit[nambepos] ) ;
if ( TP!=0) Teik=Bid+TP ;
if ( SL!=0) Stop=Bid-SL ;
Lotes=LotSize( OP_BUY, Risk, StopLoss[nambepos]) ;
if (OrderSend(Symbol(),OP_BUY,Lotes,Bid,50,Stop,Teik,0,Mg,0,CLR_NONE) < 0) return(false) ;
}
return(true) ;
}
//=====================================================================
void DelCloseOrders (int nambepos)
{//åñëè ëàáåë Nn/n ñìåùåíà ïîëüçîâàòåëåì âïðàâî òî îòëîæêè óäàëÿþòñÿ
// îòêðûòûå ïîçèöèè çàêðûâàþòñÿ ïî ðûíêó
for (int pos=OrdersTotal()-1; pos>=0 ;pos--)
{// â ýòîì öèêëå çàïîëíÿåòñÿ ìàññèâ VedPos
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()!=Symbol() ) continue;
if(Magic != ReturnMagic(pos) ) continue ;
if (nambepos!=ReturnPosition(pos)) continue ;
if (OrderType()>1) OrderDelete(OrderTicket()) ;
if (OrderType()<2) OrderClose(OrderTicket(),OrderLots(),Bid,100,CLR_NONE) ;
}
return(0) ;
}
//=====================================================================
void TrallPosition()
{// òðàëëèíã îòêðûòûõ ïîçèöèé ïåðâûö ïåðåíîñ ïîçèöèè åñëè öåíà óøëà â ïëþñ íà ñòîï ëîññ
// ñòîï ïåðåíîñèòñÿ â áåçóáûòîê ïëþñ 2 ïóíêòà òðàëë ÷åðåç êàæäûå 5 ïóíêòîâ
int nambepos ;
double SL ;
for (int pos=OrdersTotal()-1; pos>=0 ;pos--)
{// â ýòîì öèêëå çàïîëíÿåòñÿ ìàññèâ VedPos
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()!=Symbol() ) continue;
if(Magic != ReturnMagic(pos) ) continue ;
nambepos=ReturnPosition(pos);
if (Tralling[nambepos]!= 1 ) continue ;
if (OrderType() > 1 ) continue ;
SL=NormalizeDouble(StopLoss[nambepos]*Point*K,Digits) ;
//---------------------------------------------------------------------------------------------------
if (Bid-OrderOpenPrice() > SL && FistModifi[nambepos]==false && SL!=0 && OrderType()==OP_BUY)
{// ïåðâàÿ ìîäèôèêàöèÿ îðäåðà íà ïîêóïêó ïåðåíîñ â áåçóáûòîê + 3 ïóíêòà ïðèáûëè
OrderModify(OrderTicket(),0,OrderOpenPrice()+3*K*Point,
OrderTakeProfit(),0,CLR_NONE);
FistModifi[nambepos]=true ; continue ;
}
if (OrderOpenPrice()-Bid > SL && FistModifi[nambepos]==false && SL!=0 && OrderType()==OP_SELL)
{// ïåðâàÿ ìîäèôèêàöèÿ îðäåðà íà ïðîäàæó ïåðåíîñ â áåçóáûòîê + 3 ïóíêòà ïðèáûëè
OrderModify(OrderTicket(),0,OrderOpenPrice()-3*K*Point,
OrderTakeProfit(),0,CLR_NONE);
FistModifi[nambepos]=true ; continue ;
}
//-----------------------------------------------------------------------------------------------------
if (Bid-OrderStopLoss() > (SL+5*K*Point) && FistModifi[nambepos] && SL!=0 && OrderType()==OP_BUY)
{// ïîñëåäóþùèå ìîäèôèêàöèè îðäåðà
OrderModify(OrderTicket(),0,Bid-SL,OrderTakeProfit(),0,CLR_NONE);
continue ;
}
if (OrderStopLoss()-Bid > (SL+5*K*Point) && FistModifi[nambepos] && SL!=0 && OrderType()==OP_SELL)
{// ïîñëåäóþùèå ìîäèôèêàöèè îðäåðà
OrderModify(OrderTicket(),0,Bid+SL,OrderTakeProfit(),0,CLR_NONE);
continue ;
}
}
return(0) ;
}
//=====================================================================
void InitFestModifi()
{// ôóíêöèÿ èíèöèàëèçèðóåò ìàññèâ ïåðâûõ ìîäèôèêàöèé îðäåðà
// ñáðàñûâàåò ôëàã ïåðâîé ìîäèôèêàöèè åñëè íåò îòêðûòûõ îðäåðîâ â Nn/n
for (int j =0;j<=9 ;j++)
{
if (VedPos[j]!= 0 && VedPos[j]!=1 )FistModifi[j]=false ;
}
return(0) ;
}
//=====================================================================
double LotSize( int type, double LotRisk, int SL )
{ // int znakov_lot=0;
if(ObjectFind(Pr+"LotChange")>-1)
Lot=StrToDouble( ObjectDescription(Pr+"LotChange") );
if (NormalizeDouble(Lot,Digits)!=0) return(Lot) ;
double lot_min = MarketInfo( Symbol(), MODE_MINLOT );
double lot_max = MarketInfo( Symbol(), MODE_MAXLOT );
double lot_step = MarketInfo( Symbol(), MODE_LOTSTEP );
double lotcost = MarketInfo( Symbol(), MODE_TICKVALUE );
double lot = 0.0;
double dollarsPerPip = 0.0;
if (SL==0) return(HandLot) ;
SL=SL*K ;
lot = AccountBalance()*LotRisk/100.0;
dollarsPerPip = lot/SL;
// if (lot_min<2) {znakov_lot=0; if (lot_min<0.2) {znakov_lot=1; if (lot_min<0.02) {znakov_lot=3; if (lot_min<0.002) {znakov_lot=4; }}}}
lot = NormalizeDouble( dollarsPerPip/lotcost, 2 );
lot = NormalizeDouble( lot / lot_step, 0 ) * lot_step;
if ( lot < lot_min ) lot = lot_min;
if ( lot > lot_max ) lot = lot_max;
if ( AccountFreeMarginCheck( Symbol(), type, lot ) < 10 || GetLastError() == 134 )
{
Alert ( "Impossible to open position with lot = ", DoubleToStr( lot, 2 ), ". Not enough money." );
return(-1);
}
return( lot );
}
//=====================================================================
int DrawLine(string name, double Y, color Clr=Red ,int Win=0 )
{
int Error=ObjectFind(name);// Çàïðîñ
if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
{
ObjectCreate(name,OBJ_HLINE,Win, 0,Y); // Ñîçäàíèå îáúåêòà
}
ObjectSet(name,OBJPROP_COLOR,Clr) ;
ObjectSet(name,OBJPROP_STYLE,STYLE_DASHDOT) ;
}
//=====================================================================
int deinit()
{
return(0);
}
//====================================================================
int start()
{
double Up,Down ;
Up=NormalizeDouble(ObjectGet(Pr+"UpLine",OBJPROP_PRICE1),Digits) ;
Down=NormalizeDouble(ObjectGet(Pr+"DownLine",OBJPROP_PRICE1),Digits) ;
Comment(" Áàëàíñ ñ÷åòà = ",AccountBalance()," ; Ïðèáûëü = ", AccountProfit(),"\n",
" Âåðõíÿÿ ãðàíèöà êàíàëà = ",Up,"\n",
" Íèæíÿÿ ãðàíèöà êàíàëà = ",Down,"\n",
" Ñåðåäèíà êàíàëà â ïóíêòàõ = ",(Up-Down)/2/Point/K) ;
InitVedPos () ;
DrawLabels(Pr+"Lot", 1,LotX,LotY, "Lot", Red,0,16);
DrawLabels(Pr+"LotChange", 1,LotX-50,LotY,"none", Red,0,16);
TablPos() ;
Change++ ;
if (Change > 1) DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, " ", Red,0,16);
InitFestModifi() ;
TrallPosition() ;
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
---