CześćAsia pisze:wielkie dzięki
potestuję
...
PF
NIE ZAMYKA
W wolnej chwili popatrzę dlaczego nie działa(sprawdzę i poprawię),
i podeślę poprawioną wersję .
Pozdrawiam.
Kod: Zaznacz cały
if(isNewBar() ) ZamknijOtwartePozycje(0);
Kod: Zaznacz cały
bool isNewBar() {
static int prevTime;
bool newBar=false;
if(Time[0]!=prevTime) {
newBar=true;
prevTime=Time[0];
}
return(newBar);
}
int ZamknijOtwartePozycje(int kierunek)
{
for (int i = OrdersTotal(); i > 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICMA)
{
if (OrderType() == OP_BUY && kierunek >= 0)
{ // zamkniej BUY
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue);
}
if (OrderType() == OP_SELL && kierunek <=0)
{ // zamkniej SELL
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Blue);
}
}
}
}
}
Kod: Zaznacz cały
iBarShift(Symbol(),Period(),OrderOpenTime());
Kod: Zaznacz cały
datetime time;
Kod: Zaznacz cały
OrderSend(.....);
time=Time[0];
Kod: Zaznacz cały
if (/*odwolanie funkcji sprawdzajaca czy jest otwarte zleceni*/ && time!=Time[0]) /// tutaj odwolanie do funkcji zamykajacej pozycje
Kod: Zaznacz cały
if(isNewBar())ZamknijBuy();
if(isNewBar())ZamknijSell();
////////////////////////////////////////////////
bool isNewBar() {
static int prevTime;
bool newBar=false;
if(Time[0]!=prevTime) {
newBar=true;
prevTime=Time[0];
}
return(newBar);
}
void ZamknijBuy()
{
int i;
for (i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (OrderType() == OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), Bid,3, Aqua);
}
}
}
}
void ZamknijSell()
{
int i;
for (i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (OrderType() == OP_SELL)
{
OrderClose(OrderTicket(), OrderLots(), Ask,3, Magenta);
}
}
}
}
Kod: Zaznacz cały
#include <stdlib.mqh>
extern int MagicNumber = 99998;
extern int TakeProfit = 1000;
extern int StopLoss = 1000;
extern double lot = 1;
///////////////////////////////////////////////////////////////////////////////////////////////////
void init()
{
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void deinit()
{
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void start()
{
if (total(OP_BUY )==0 && total(OP_SELL)==0 && Close[1]-Open[1]>0)send(OP_BUY);
if (total(OP_SELL)==0 && total(OP_BUY )==0 && Close[1]-Open[1]<0)send(OP_SELL);
if(isNewBar() ) ZamknijOtwartePozycje(0);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
int total(int cmd)
{
int sum=0;
for ( int i=0;i<=OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()==Symbol() && cmd ==OrderType() && MagicNumber==OrderMagicNumber()) sum++;
}
return(sum);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void send(int cmd)
{
//if (total(cmd)>0) return;
double Point_ = Point;
if (Digits==3 || Digits==5) Point_=Point*10;
double tp;
double sl;
double pr;
color cl;
if (cmd==OP_BUY)
{
pr = Ask;
tp = Ask + TakeProfit*Point_;
sl = Ask - StopLoss*Point_;
cl = Blue;
}
if (cmd==OP_SELL)
{
pr = Bid;
tp = Bid - TakeProfit*Point_;
sl = Bid + StopLoss*Point_;
cl = Red;
}
int ticket = OrderSend(Symbol(),cmd,lot,pr,0,sl,tp,"",MagicNumber,0,cl);
if (ticket<=0) Print(ErrorDescription(GetLastError()));
}
/////////////////////////////////////////////////////////////////////////
bool isNewBar() {
static int prevTime;
bool newBar=false;
if(Time[0]!=prevTime) {
newBar=true;
prevTime=Time[0];
}
return(newBar);
}
int ZamknijOtwartePozycje(int kierunek)
{
for (int i = OrdersTotal(); i > 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (OrderType() == OP_BUY && kierunek >= 0)
{ // zamkniej BUY
OrderClose(OrderTicket(),OrderLots(),Bid,0,Blue);
}
if (OrderType() == OP_SELL && kierunek <=0)
{ // zamkniej SELL
OrderClose(OrderTicket(),OrderLots(),Ask,0,Blue);
}
}
}
}
}
Kod: Zaznacz cały
if(isNewBar())ZamknijBuy();
if(isNewBar())ZamknijSell();
Kod: Zaznacz cały
bool nowaSwieca=isNewBar();
if(nowaSwieca)
{
ZamknijSell();
ZamknijBuy();
}
Kod: Zaznacz cały
for (i = 0; i < OrdersTotal(); i++)
Kod: Zaznacz cały
for (i = OrdersTotal(); i>=0 ; i--)
powinno bycTig3r pisze:Kod:
for (i = OrdersTotal(); i>=0 ; i--)
gdyż jeśli usuniesz zlecenie to się przestawią ich numery i będzie błędnie wskazywało, jak dasz od końca to będzie ok
Kod: Zaznacz cały
OrdersTotal()-1
Kod: Zaznacz cały
if(isNewBar())
{ZamknijBuy();
ZamknijSell();
}
Nadal nie zamyka. Z resztą ten drugi kod w moim poście to gotowiec - tylko wkleić i możesz sam spróbować. Zobaczysz, że nie zamyka. Tak po samym kodzie może niektórych rzeczy nie widać, ale napisałem ten kod abyście mogli sobie zobaczyć jak działa w praktyce.xpep pisze:sprobuj tak Kod:
if(isNewBar())
{ZamknijBuy();
ZamknijSell();
}