
extern int StochK=200;
extern int StochD=12;
extern int StochSlowing=1;
extern int UpperThreshold=80;
extern int LowerThreShold=20;
extern int Mn=140; //Magic
extern int mn;
extern int X=1;
extern int TimFr1=48, TimFr2=24,TimFr3=4;
extern int n=6;
extern double Lot1;
extern double lots;
extern double Lot;
int Ontime()
{
int time=0;
if((Hour()==2&&Minute()<=1)||(Hour()==2&&Minute()==30)||(Hour()==3&&Minute()<=1))
time=1;
return(time);
}
void PutOrderStop(int order_type,double price,double SL,double TP,int Magic)
{
int sellstop=0;
sellstop=OrderSend(Symbol(),order_type,Lot,price,0,SL,TP,"My order#",Mn,0,Red);
return;
}
int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Mn)
{
if(OrderType()<4)
count++;
}
}
}
return(count);
}
//=========================================================
int BuyTicket;
int SellTicket;
int start()
{
double S=AccountMargin() + AccountFreeMargin();
int OPB1,OPS1,ss;
int T=7*X;
double AA = iClose(NULL,PERIOD_H1,TimFr1),BB = iClose(NULL,PERIOD_H1,TimFr2),
CC=iClose(NULL,PERIOD_H1,1),AK = iOpen(NULL,PERIOD_H1,4);
if(S<10000000)
lots= S*0.0002;
double AC=(CC-AA)/Point,AKC=(CC-AK)/Point,BC=(CC-BB)/Point;
double TR = AC;
double Signal=iStochastic(Symbol(),0,StochK,StochD,StochSlowing,MODE_SMA,STO_LOWHIGH,MODE_SIGNAL,1);
double Main=iStochastic(Symbol(),0,StochK,StochD,StochSlowing,MODE_SMA,STO_LOWHIGH,MODE_MAIN,1);
double Last=iStochastic(Symbol(),0,StochK,StochD,StochSlowing,MODE_SMA,STO_LOWHIGH,MODE_BASE,2);
int s,SS;
if(Signal>Main)
{
double m=Signal/(Main+0.0001);
}
else
if(Signal<Main)
m=Main/(Signal+0.0001);
double ma=m*100;
int DSM=Signal-Main;
int DMS=Main-Signal;
if(Signal>Main&&Signal<70)
{
if((DSM>10&&DSM<30)&&((ma>100&&ma<115)||(ma>120&&ma<700)))
{OPB1=1; ss=m*Signal; if(ss<90)ss=m*70;if(ss>100)ss=100; SS=ss;}
else
if(((ma>105&&ma<105)||(ma>125&&ma<140)||(ma>145&&ma<700)))
{OPS1=1; ss=m*Main; if(ss<90)ss=m*90;if(ss>120)ss=110; SS=150;}
}
s=ss/(n-1);//отработка
s=s*X;
ss=ss*X;
SS=SS*X;
double Bstoploss,Sstoploss;
Bstoploss=Bid-ss*Point;
Sstoploss=Ask+ss*Point;
int PriceBuy=ss-s-10;
int PriceSell=ss-s-10;
double BstopOpen =Ask+ PriceBuy*Point;
double SstopOpen =Bid- PriceSell*Point;
double BuyStopLoss=Bid-ss*Point,SellStopLoss=Ask+ss*Point;
double BstopOpenLoss = BstopOpen-SS*Point;
double SstopOpenLoss = SstopOpen+SS*Point;
double BstopClose = BstopOpen+s*Point;
double SstopClose = SstopOpen-s*Point;
Lot=lots*n;
Lot1=lots*(n+n/2);
double OPBSS=OrderOpenPrice()-30*X*Point; double OPSSS=OrderOpenPrice()+30*X*Point;
bool operation=0;
for(int pos=0;pos<OrdersTotal();pos++)
{if ( OrderSelect (pos, SELECT_BY_POS) == false ) continue;
if ( OrderSymbol()==Symbol()) break;}
if(Ontime()==1){
if(OPB1==1)
{operation=1;if(operation==1 && (OrderSymbol()!=Symbol()||OrdersTotal()==0))
int OP=OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-ss*Point,Ask+T*Point,"My order#",mn,0,Green);
}
if( OP>0 )
{if((OrderSymbol()!=Symbol()||OrdersTotal()==1))
PutOrderStop(5,SstopOpen,SstopOpenLoss,SstopClose,Mn);}
if(OPS1==1)
{operation=1;if(operation==1 &&(OrderSymbol()!=Symbol()||OrdersTotal()==0))
int OPSs=OrderSend(Symbol(),OP_SELL,lots,Bid,0,Ask+ss*Point,Bid-T*Point,"My order#",mn,0,Red);
}
if( OPSs>0 )
{if((OrderSymbol()!=Symbol()||OrdersTotal()==1))
PutOrderStop(4,BstopOpen,BstopOpenLoss,BstopClose,Mn);
}
}
if(CountTrades()==1){
if((OrderSymbol()!=Symbol()||OrdersTotal()==2))
{
BuyTicket = OrderSend(Symbol(),OP_BUYSTOP,Lot1,OPBSS,0,OPBSS-70*X*Point,OPBSS+45*X*Point,"My order#",Mn,0,Blue);}
return(0);
}
if(CountTrades()==1){
if((OrderSymbol()!=Symbol()||OrdersTotal()==2)){
SellTicket=OrderSend(Symbol(),OP_SELLSTOP,Lot1,OPSSS,0,OPSSS+70*X*Point,OPSSS-30*X*Point,"My order#",Mn,0,Red);}
return(0);
}
if(OrderMagicNumber()==Mn)
{
for(int j=OrdersTotal()-1; j>=0; j--)
if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol()&&OrderMagicNumber())
int del=OrderDelete(OrderTicket());
if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol()&&OrderMagicNumber())
del=OrderDelete(OrderTicket());
}
return(0);
}
Comment("\n | SIMsim ", " Валюта ",Symbol(),
"\n | Значения TR ",TR,
"\n | Значения OrdersTotal() ",OrdersTotal(),
"\n | Значения OPr ",0,
"\n | Значения ma === ",ma," Значения total_orders ",TotalOpenOrders(),
"\n | Значения OPB1 ",OPB1," Значения OPS1 ",OPS1,
"\n | Значения Main ",Main," Значения DSM ",DSM," Значения DMS ",DMS,
"\n | Значения Signal ",Signal," Значения OPBSS ",OPBSS," Значения OPBSS ",OPSSS,
"\n | Значения lots ",lots," Значения OrderOpenPrice() ",OrderOpenPrice(),
"\n | Значения ss ",ss," Значения count ",CountTrades(),
"\n | Mn ",Mn
);
return(0);
}
<code> (На рис. это 1) if(OPB1==1) { operation=1;if(operation==1 &&OrderSymbol()!=Symbol()||OrdersTotal()==0) OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-ss*Point,Ask+T*Point,"My order#",mn,sl,Green); (На рис. это 2) if(operation==1 &&OrderSymbol()!=Symbol()||OrdersTotal()==1) OrderSend(Symbol(),OP_SELLSTOP,Lot,SstopOpen,0,SstopOpenLoss,SstopClose,"My order#",Mn,sl,Red);} int count=0; for(int ii=OrdersTotal()-1; ii>=0; ii--) { if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Mn) { if(OrderType()<5)count++;OrderTicket(); } } } double OPSS=OrderOpenPrice(); (На рис. это 4) if(count==1) { if(operation==1 &&OrderSymbol()!=Symbol()||OrdersTotal()==2) OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+20*X*Point,0,Bid-30*X*Point,Ask+30*X*Point,"My order#",Mn,0,Green); }</code>
Входим в рынок по индикатору стохастик
Если Сигнал выше Buy, иначе — Sell (Ордер — А)
лот 0.1 стоп лосс 90 п. ТейкПрофит 5п.
С ордером А выставляем (ордер В) buystop или sellstop в противоположную сторону через 70п. (ТП — 27 п., стоп лосс 90п. лот 0.5.
при срабатывании ордера В выставляется ордер С с лотом 1.5 buystop или sellstop в противоположную сторону через 50п. ТП — 22 п.
при срабатывании ордера С выставляется ордер D с лотом 1.5 buystop или sellstop в противоположную сторону через 60п. ТП — 60 п.
ТЗ: Написать код, чтобы больше не открывалось ордеров. Когда закрывается один из ABCD — ордеров.
Алгоритм открытия ордеров уже есть. Только этой детали не хватает.
LeonidPetr