Zawarte w nim Warunki do otwarcia pozycji są proste. Chciałbym dołączyć do niego Stochastic Oscylator a wprzyszłosci jeszcz cos.
Sygnały ze wskażnika można podzielic na sel- buy i jak sie nie myle przypisac zmiennej np
int Rsi_sygnal=1 dla sel, int Rsi_sygnałna=2 dla buy. Mój problem polega
na tyl że nie wiem jak zrobić aby po prezecięcu sie lini wskażnika zdeklarowana zmienna utzymywała wartość
do czasu az np z warunku sel przejdzie na buy. Nie jestem pewien czy to chodzi o przypisanie i globalą czy lokalną widoczność.
w załączniku zamiesciłem ea bez zmian a chciałbym dołączyć to
Kod: Zaznacz cały
int Stoch_sygnal ;
double kline[3], dline[3];
for(int z = 0;z < 3;z++)
{
kline[i] = iStochastic(NULL, Period(), 8, 3, 3, MODE_SMA, 0, MODE_MAIN, z);
dline[i] = iStochastic(NULL, Period(), 8, 3, 3, MODE_SMA, 0, MODE_SIGNAL, z);
}
if ((kline[1] < dline[1]) && (kline[2] > dline[2])&& (kline[1] < 20.0) Stoch_sygnal=2 ; //precięcie sie lini na dole BUY
if ((kline[1] > dline[1]) && (kline[2] < dline[2])&& (kline[1] > 80.0)) Stoch_sygnal=1 ;//precięcie sie lini na górze sel
Kod: Zaznacz cały
//---- parametry wejściowe
extern double Lots=0.1;
extern int Slip=5;
extern double TakeProfit=50;
extern double StopLoss=50;
extern int RSI_Okres=14;
extern int CenaOdniesienia=4;
extern double BuyPoint=30;
extern double SellPoint=70;
extern bool ZamknijPrzeciwstawne=true;
double kline[3], dline[3];
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int Rsi_sygnal;
int Stoch_sygnal ;
int Slippage=Slip;
int MagicNumber1=20101,MagicNumber2=20102,i,ZamknijSel=0,ZamknijBuy=0;
double TP=NormalizeDouble(TakeProfit,Digits);
double SL=NormalizeDouble(StopLoss,Digits);
double slb=NormalizeDouble(Ask-SL*Point,Digits);
double tpb=NormalizeDouble(Ask+TP*Point,Digits);
double sls=NormalizeDouble(Bid+SL*Point,Digits);
double tps=NormalizeDouble(Bid-TP*Point,Digits);
//-------------------------------------------------------------------+
//Sprawdzanie cz jest otwarta pozycja
//-------------------------------------------------------------------+
if(OrdersTotal()>0){
for(i=1; i<=OrdersTotal(); i++)
{
if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==MagicNumber1) {int CzyOtwartaBUY=1;}
if(OrderMagicNumber()==MagicNumber2) {int CzyOtwartaSEL=1;}
}
}
}
//-----------------------------------------------------------------
// Definiowanie Stoch
//-----------------------------------------------------------------
for(int z = 0;z < 3;z++)
{
kline[i] = iStochastic(NULL, Period(), 8, 3, 3, MODE_SMA, 0, MODE_MAIN, z);
dline[i] = iStochastic(NULL, Period(), 8, 3, 3, MODE_SMA, 0, MODE_SIGNAL, z);
}
//-----------------------------------------------------------------
// Definiowanie Rsi
//-----------------------------------------------------------------
double RSInow=iRSI(NULL,0,RSI_Okres,CenaOdniesienia,0);
double RSIlast=iRSI(NULL,0,RSI_Okres,CenaOdniesienia,1);
double RSIprev=iRSI(NULL,0,RSI_Okres,CenaOdniesienia,2);
//warunki dla stoch
if ((kline[1] < dline[1]) && (kline[2] > dline[2])&& (kline[1] < 20.0)) Stoch_sygnal=2 ; //precięcie sie lini na dole BUY
if ((kline[1] > dline[1]) && (kline[2] < dline[2])&& (kline[1] > 80.0)) Stoch_sygnal=1 ;//precięcie sie lini na górze sel
//warunki dla rsi
if((RSInow>BuyPoint)&&(RSIlast<BuyPoint)&&(RSIprev<BuyPoint)) Rsi_sygnal=2; // RSI wrunek otwarcia BUY RSI
if((RSInow<SellPoint)&&(RSIlast>SellPoint)&&(RSIprev>SellPoint)) Rsi_sygnal=1; // RSI wrunek otwarcia SEL RSI
//-----------------------------------------------------------------------------------------------------
// Kryteria otwarcia
//-----------------------------------------------------------------------------------------------------
// Open buy
if((Stoch_sygnal==2)&&(Rsi_sygnal==2)&&(CzyOtwartaBUY!=1)){
int OtwarteBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,slb,tpb,"Rsi buy",MagicNumber1,0,Blue);
if(ZamknijPrzeciwstawne==true)ZamknijSel=1;
}
// Open sell
if((Stoch_sygnal==1)&&(Rsi_sygnal==1)&&(CzyOtwartaSEL!=1)){
int OtwarteSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,sls,tps,"Rsi sell",MagicNumber2,0,Green);
if(ZamknijPrzeciwstawne==true)ZamknijBuy=1;
}
//-------------------------------------------------------------------------------------------------
// Kryteria zamknięcia
//-------------------------------------------------------------------------------------------------
if(ZamknijSel==1||ZamknijBuy==1||OtwarteBuy<1||OtwarteSel<1){// start
if(OrdersTotal()>0){
for(i=1; i<=OrdersTotal(); i++){
if (OrderSelect(i-1,SELECT_BY_POS)==true){
if(OrderMagicNumber()==MagicNumber1&&ZamknijBuy==1) { OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE); }
if(OrderMagicNumber()==MagicNumber2&&ZamknijSel==1) { OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE); }
}
}
}
}// stop
//-------------------------------------------------------------------
return(0);
}
//+------------------------------------------------------------------+