Witam, moj problem wyglada nastepujaco.
buduje EA. w momencie kiedy warunki buy lub sell sa spelnione otwiera sie odpowiednie zlecenie. zlecenie to ograniczam do pewnego TP lub SL. kiedy zlecenie sie zamyka otwiera sie kolejne gdyz warunki nadal sa spelnione. jednak sygnal juz jest nie aktualny.
jak zrobic aby nie otwieraly sie klolejne zlecenia. chcialbym czekac do zlecenia przeciwnego. co zrobic?
Problem z otewieraniem pozycji
Więc tak , nie podając gotowego rozwiązania podam pewien sposób .
Tig3r miał chyba to na myśli.
@bzyqe
Najpierw wprowadzasz dwie zmienne ("pisze z głowy" )
Tig3r miał chyba to na myśli.
@bzyqe
Najpierw wprowadzasz dwie zmienne ("pisze z głowy" )
Kod: Zaznacz cały
bool BuyS=true;
bool SellS=true;
start
{
if(warunek na Buy && BuyS)
(............)<-Część kodu odpowiedzialna za otworzenie zlecenia)
//Po wykonaniu zlecenia
BuyS=false;
SellS=true;
}
if(warunek na Sell && SellS)
(............)<-Część kodu odpowiedzialna za otworzenie zlecenia)
//Po wykonaniu zlecenia
BuyS=true;
SellS=false;
}
}
ok, rozumiem co chcesz przekazac.
ale w moim ea po wprowadzeniu tego nie dziala tak jak chce. TP zabiera profit lecz ponownie otwiera zlecenie w tym samym kierunku, gdyz warunki ciagle sa takie same.
Program musi wiedziec iz ostatnie zamkniete zlecenie bylo typu np BUY - wtedy bedzie oczekiwal na sygnal SELL.
ale w moim ea po wprowadzeniu tego nie dziala tak jak chce. TP zabiera profit lecz ponownie otwiera zlecenie w tym samym kierunku, gdyz warunki ciagle sa takie same.
Program musi wiedziec iz ostatnie zamkniete zlecenie bylo typu np BUY - wtedy bedzie oczekiwal na sygnal SELL.
oto kod
Kod: Zaznacz cały
extern int h_open=8;
extern int h_close=20;
extern int magic=19790704;
extern double Lots=0.01;
extern int SL=30;
extern int TP=10;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double bb_UP,bb_DOWN;
int FTBlue1,FTRed1,FTBlue2,FTRed2;
bool O_BUY, O_SELL;
int h_current;
int ticket;
int order_type,i;
//Custom Indicators
bb_UP=iCustom(NULL,0,"BBands_Stop_v1_BAR",20,2,0,1);
bb_DOWN=iCustom(NULL,0,"BBands_Stop_v1_BAR",20,2,1,1);
FTBlue1=iCustom(NULL,0,"FLATTRAND_w_MACD_mtf",15,4,8,9,1,1);
FTRed1=iCustom(NULL,0,"FLATTRAND_w_MACD_mtf",15,4,8,9,0,1);
FTBlue2=iCustom(NULL,0,"FLATTRAND_w_MACD_mtf",15,6,13,9,1,1);
FTRed2=iCustom(NULL,0,"FLATTRAND_w_MACD_mtf",15,6,13,9,0,1);
//Chceck Time
h_current=TimeHour(TimeCurrent());
if (h_current>=h_open && h_current<=h_close){
if (bb_UP>1 && FTBlue1==1 && FTBlue2==1) O_BUY=true;
if (bb_DOWN>1 && FTRed1==1 && FTRed2==1) O_SELL=true;
}
if (OrdersTotal()<1)
{
//BUY
if (O_BUY==true)
{
ticket=OrderSend(Symbol(), OP_BUY, Lots,Ask,3,Ask-SL*Point,Ask+TP*Point,"BUY",magic+100,0,Green);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}
//SELL
if (O_SELL==true)
{
ticket=OrderSend(Symbol(), OP_SELL, Lots,Bid,3,Bid+SL*Point,Bid-TP*Point,"SELL",magic,0,Red);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}
}
Comment(bb_UP,", ",bb_DOWN,"\n",
FTBlue1,", ",FTRed1,"\n",
FTBlue1,", ",FTRed1,"\n",
O_BUY,", ",O_SELL,"\n",
h_current,"\n",
"\nEND OF RAPORT");
//----
return(0);
}
//+------------------------------------------------------------------+
@bzyqe
Więc tak nie będę ingerował w twoje EA . Bo to niema sensu . Jak sam nie znajdziesz , to się nie nauczysz
Ale za to z wykorzystaniem metody która podałem kilka wątków wyżej , napisałem proste EA.
Algorytm otwiera pozycje w sposób na przemienny(przy użyciu sygnałów ze SMA)Wyjście z pozycji jest za pomocą T/P lub S/L Jeżeli otworzy Buy i go zamknie na T/P to nie otworzy kolejny raz Buy , będzie czekał aż otworzy Sell .etc
Więc tak nie będę ingerował w twoje EA . Bo to niema sensu . Jak sam nie znajdziesz , to się nie nauczysz

Ale za to z wykorzystaniem metody która podałem kilka wątków wyżej , napisałem proste EA.
Algorytm otwiera pozycje w sposób na przemienny(przy użyciu sygnałów ze SMA)Wyjście z pozycji jest za pomocą T/P lub S/L Jeżeli otworzy Buy i go zamknie na T/P to nie otworzy kolejny raz Buy , będzie czekał aż otworzy Sell .etc
Kod: Zaznacz cały
#property copyright ""
#property link ""
bool Buy=true;
bool Sell=true;
int ticket;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
double sma= iMA(Symbol(),0,25,0,0,0,1);
if (Close[1]>sma && OrdersTotal()<1 && Buy)
{
ticket=0;
for(int i=0;i<=5;i++)
{
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-11*Point,Ask+11*Point,"...",1000,0,Green);
if (ticket>0)
{
break;
}
}
Buy=false;
Sell=true;
}
if (Close[1]<sma && OrdersTotal()<1 && Sell)
{
ticket=0;
for(int ii=0;ii<=5;ii++)
{
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,3,Bid+11*Point,Bid-11*Point,"...",1000,0,Green);
if (ticket>0)
{
break;
}
}
Buy=true;
Sell=false;
}
Comment("Buy: "+Buy+"/"+"Sell: "+Sell);
return(0);
}
@bzyqe
Tak jak Ci mówiłem. Teraz wchodzisz na długą gdy wskaźniki mają wartość 1. Jeśli wyskoczysz z rynku, a wskaźniki nadal mają wartość 1 to EA znowu otworzy świeżo zamkniętą pozycję. Sprawdzaj więc nie tylko bieżącą wartość wskaźników, ale też poprzednią i wchodź na rynek przy zmianie wartości. Może nie przy zmianie wartości wszystkich wskaźników, bo może się okazać, że zdarza się b. rzadko, żeby wszystkie jednocześnie zmieniły wartość, ale któregoś wiodącego.
Tak jak Ci mówiłem. Teraz wchodzisz na długą gdy wskaźniki mają wartość 1. Jeśli wyskoczysz z rynku, a wskaźniki nadal mają wartość 1 to EA znowu otworzy świeżo zamkniętą pozycję. Sprawdzaj więc nie tylko bieżącą wartość wskaźników, ale też poprzednią i wchodź na rynek przy zmianie wartości. Może nie przy zmianie wartości wszystkich wskaźników, bo może się okazać, że zdarza się b. rzadko, żeby wszystkie jednocześnie zmieniły wartość, ale któregoś wiodącego.