EA oparty na niestandardowym wskaźniku

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Kod: Zaznacz cały

#include <stdlib.mqh> 
int MagicNumber    = 888634; 
extern double lot          = 1; 
extern int    TakeProfit = 20; 
extern int    StopLoss  = 20; 
extern int    intensity    = 18; 
extern int    periods      = 800;  
extern bool   TrailingStop = true;
extern int    ActivateTS   = 10;
extern int    StepTS       = 15;  
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void init() 
{} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void deinit() 
{} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void start() 
{  
   double it1 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,0); 
   double it2 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,1); 
   //trailing stop
   if (total(OP_BUY )>0 && TrailingStop==true) ts(OP_BUY );
   if (total(OP_SELL)>0 && TrailingStop==true) ts(OP_SELL);
   if(total(OP_BUY)==0&&it1>0&&it2<=0){send(OP_BUY);ZamknijSell();} 
   if(total(OP_SELL)==0&&it1<0&&it2>=0){send(OP_SELL);ZamknijBuy();}  
} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
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) 
{ 
   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())); 
} 
///////////////////////////////////////////////////////////////////////// 
void ZamknijBuy() 
{int i; 
 for (i = 0; i < OrdersTotal(); i++) 
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber()) 
  {if (OrderType() == OP_BUY) 
  {OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);}}}} 

void ZamknijSell() 
{int i; 
 for (i = 0; i < OrdersTotal(); i++) 
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber()) 
  {if (OrderType() == OP_SELL) 
  {OrderClose(OrderTicket(),OrderLots(),Ask,1,Black);}}}}
void ts(int cmd)
{  
   double Point_ = Point;
   if (Digits==3 || Digits==5) Point_=Point*10;
   for (int i=0;i<=OrdersTotal();i++)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (Symbol()==OrderSymbol() && MagicNumber==OrderMagicNumber() && cmd==OrderType() && OrderStopLoss()!=0)
      {
         double sl = 0;
         color  cl;
         if (OrderType()==OP_BUY)
         {
            if (Bid>=OrderOpenPrice()+ActivateTS*Point_)
            {
               if (Bid-OrderStopLoss()>=(StepTS)*Point_)
               {  
                  sl = Bid-StepTS*Point_;
               }
            }
            cl = Blue;
         }
         if (OrderType()==OP_SELL )
         {
            if (Ask<=OrderOpenPrice()-ActivateTS*Point_) 
            {
               if (OrderStopLoss()-Ask>=(StepTS)*Point_)
               {  
                  sl = Ask+StepTS*Point_;
               }
            }
            cl = Red;
         }
         if (sl!=0)
         {
            int ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,cl);
            if (ticket<=0) Print(ErrorDescription(GetLastError()));
         }
      }
   }
}
Solą życia jest kasa.

ebate
Stały bywalec
Stały bywalec
Posty: 24
Rejestracja: 18 mar 2012, 21:06

Nieprzeczytany post autor: ebate »

Czy jest możliwość, aby do EA dodać funkcję, dzięki której będzie on handlował w określonym przedziale godzinowym?
Konkretnie chodzi mi o godziny od 13-16. Robot miałby się włączać o 13, czyli od 13 czekałby odpowiednią ilość czasu na odpowiedni moment na kupno/sprzedaż waluty. Jeśli chodzi o koniec. W przypadku, gdyby o 16 byłaby otwarta jakaś transakcja, EA miałby tak długo czekać, aż takowa by została zamknięta zgodnie z warunkami opisanymi kilka postów wcześniej. Odpada zamknięcie transakcji równo o 16 bez względu na wskaźnik.

Za wcześniejszą pomoc serdecznie dziękuję.

Za pomoc teraz będę również bardzo wdzięczny.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Sprawdź, bo nie miałem kiedy.

Kod: Zaznacz cały

#include <stdlib.mqh> 
int MagicNumber    = 888634; 
extern double lot          = 1; 
extern int    TakeProfit = 20; 
extern int    StopLoss  = 20; 
extern int    intensity    = 18; 
extern int    periods      = 800;  
extern bool   TrailingStop = true; 
extern int    ActivateTS   = 10; 
extern int    StepTS       = 15;
extern string time1Begin    = "13:00"; 
extern string time1End      = "16:00";   
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void init() 
{} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void deinit() 
{} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void start() 
{  
   double it1 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,0); 
   double it2 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,1); 
   //trailing stop 
   if (total(OP_BUY )>0 && TrailingStop==true) ts(OP_BUY ); 
   if (total(OP_SELL)>0 && TrailingStop==true) ts(OP_SELL); 

   if(isTradingTime()==true&&total(OP_BUY)==0&&it1>0&&it2<=0)send(OP_BUY); 
   if(it1>0&&it2<=0)ZamknijSell(); 
   if(isTradingTime()==true&&total(OP_SELL)==0&&it1<0&&it2>=0)send(OP_SELL);  
   if(it1<0&&it2>=0)ZamknijBuy();  
   
} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
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) 
{ 
   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())); 
} 
///////////////////////////////////////////////////////////////////////// 
void ZamknijBuy() 
{int i; 
 for (i = 0; i < OrdersTotal(); i++) 
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber()) 
  {if (OrderType() == OP_BUY) 
  {OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);}}}} 

void ZamknijSell() 
{int i; 
 for (i = 0; i < OrdersTotal(); i++) 
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber()) 
  {if (OrderType() == OP_SELL) 
  {OrderClose(OrderTicket(),OrderLots(),Ask,1,Black);}}}} 
void ts(int cmd) 
{  
   double Point_ = Point; 
   if (Digits==3 || Digits==5) Point_=Point*10; 
   for (int i=0;i<=OrdersTotal();i++) 
   { 
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES); 
      if (Symbol()==OrderSymbol() && MagicNumber==OrderMagicNumber() && cmd==OrderType() && OrderStopLoss()!=0) 
      { 
         double sl = 0; 
         color  cl; 
         if (OrderType()==OP_BUY) 
         { 
            if (Bid>=OrderOpenPrice()+ActivateTS*Point_) 
            { 
               if (Bid-OrderStopLoss()>=(StepTS)*Point_) 
               {  
                  sl = Bid-StepTS*Point_; 
               } 
            } 
            cl = Blue; 
         } 
         if (OrderType()==OP_SELL ) 
         { 
            if (Ask<=OrderOpenPrice()-ActivateTS*Point_) 
            { 
               if (OrderStopLoss()-Ask>=(StepTS)*Point_) 
               {  
                  sl = Ask+StepTS*Point_; 
               } 
            } 
            cl = Red; 
         } 
         if (sl!=0) 
         { 
            int ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,cl); 
            if (ticket<=0) Print(ErrorDescription(GetLastError())); 
         } 
      } 
   } 
}
///////////////////////////////////////////////////////////////////////
bool isTradingTime() { 
    if(TimeCurrent()>StrToTime(time1Begin) && TimeCurrent()<StrToTime(time1End)) { 
        return(true);} 
       return(false);}
Solą życia jest kasa.

annafx
Stały bywalec
Stały bywalec
Posty: 53
Rejestracja: 30 lip 2012, 10:04

Nieprzeczytany post autor: annafx »

Gdzieś widziałam ea pt. siatka, która wprowadza do strategii ts-a

Awatar użytkownika
mike_05
Maniak
Maniak
Posty: 1668
Rejestracja: 02 wrz 2010, 11:55

Nieprzeczytany post autor: mike_05 »

W języku Amibrokera jest taka funkcja exRem(Buy,Sell)
powoduje, ze Buy nie zostanie otwarty jak jest otwarty Sell. Nie wiem jak w mql to jest traktowane, czy jest gotowa funkcja, czy trzeba by pętle pisać, ale tu w testerze otwiera najpierw z sygnału i dopiero zamyka poprzednią. Na platformach bez hedge nie będzie handlować, zwłaszcza jak dojdą luki i opóźnienia w realizacji.

Dodano po 2 godzinach 57 minutach:

jako system ciągły bez sl i tp

Kod: Zaznacz cały

lot=1.00000000
lot,F=0
lot,1=1.00000000
lot,2=0.00000000
lot,3=0.00000000
TakeProfit=300
TakeProfit,F=0
TakeProfit,1=20
TakeProfit,2=0
TakeProfit,3=0
StopLoss=300
StopLoss,F=0
StopLoss,1=20
StopLoss,2=0
StopLoss,3=0
intensity=36
intensity,F=0
intensity,1=18
intensity,2=0
intensity,3=0
periods=900
periods,F=0
periods,1=800
periods,2=0
periods,3=0
TrailingStop=0
ActivateTS=10
ActivateTS,F=0
ActivateTS,1=10
ActivateTS,2=0
ActivateTS,3=0
StepTS=15
StepTS,F=0
StepTS,1=15
StepTS,2=0
StepTS,3=0
time1Begin=00:00
time1End=23:59
15M
4 miesiace
sadzę, że można jeszcze pokombinować z parametrem intensity.
Jeżeli chcesz odnieść sukces, naucz się cenić ludzi.

ebate
Stały bywalec
Stały bywalec
Posty: 24
Rejestracja: 18 mar 2012, 21:06

Nieprzeczytany post autor: ebate »

Mam pytanie. Mam pewien pomysł na tą strategię. Lecz już pojawił się pierwszy błąd. Testuje EA z samym SL. Dlaczego nie mogę ustawić SL od 5 w dół? W testerze przy ustawionym SL=3 EA w ogóle nie zawiera transakcji. Dlaczego?

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Każdy broker ma jakiś limit. Większośc ma 5 pipsów od ceny i bliżej nie ustawisz.

Dodano po 2 minutach:

Można zrobić zamknięcie przez egzekucję. Zamiast poziomu SL robot ustala sobie "niewidzialny" poziom np. 3 pipsów i jak cena tam wejdzie to odbywa się zmkniecie poprzez OrderClose().
Minusem są poślizgi i requoty. SL to stały poziom. A taka egzekucja to to samo jakbyś zamykałz ręki - nie zawsze Ci wyjdzie dokładnie trafić z ceną zamknięcia.
Solą życia jest kasa.

ebate
Stały bywalec
Stały bywalec
Posty: 24
Rejestracja: 18 mar 2012, 21:06

Nieprzeczytany post autor: ebate »

Szkoda, że SL się nie da. Odnośnie pomysł to zrobiłem 2 tyg. test manualnie. SL=3 oraz TS=10 na M5 EUR/USD. Wyniki jak dla mnie są obiecujące.W pierwszym tyg. sierpnia jest to 276 pipsów na plusie, w drugim tygodniu jest to 335 pipsów. 611 pipsów w 2 tyg przy 242 transakcjach to, przynajmniej dla mnie, niezły wynik. Strategia sprawdza się najlepiej przy dużych ruchach w cenie. Po testach manualnych chciałem perzobić Twój kod tak, aby spełniał powyższe warunki:

Kod: Zaznacz cały

#include <stdlib.mqh>
int MagicNumber    = 888634;
extern double lot          = 1;
extern int    StopLoss  = 3;
extern int    intensity    = 18;
extern int    periods      = 800; 
extern bool   TrailingStop = true;
extern int    ActivateTS   = 1;
extern int    StepTS       = 10; 
///////////////////////////////////////////////////////////////////////////////////////////////////
void init()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////
void deinit()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////
void start()
{ 
   double it1 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,0);
   double it2 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,1);
   //trailing stop
   if (total(OP_BUY )>0 && TrailingStop==true) ts(OP_BUY );
   if (total(OP_SELL)>0 && TrailingStop==true) ts(OP_SELL);
   if(total(OP_BUY)==0&&it1>0&&it2<=0){send(OP_BUY);ZamknijSell();}
   if(total(OP_SELL)==0&&it1<0&&it2>=0){send(OP_SELL);ZamknijBuy();} 
}
///////////////////////////////////////////////////////////////////////////////////////////////////
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)
{
   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 = 0;
      sl = Ask-StopLoss*Point_;
      cl = Blue;
   } 
   if (cmd==OP_SELL)
   {
      pr = Bid;
      tp = 0;
      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()));
}
/////////////////////////////////////////////////////////////////////////
void ZamknijBuy()
{int i;
 for (i = 0; i < OrdersTotal(); i++)
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber())
  {if (OrderType() == OP_BUY)
  {OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);}}}}

void ZamknijSell()
{int i;
 for (i = 0; i < OrdersTotal(); i++)
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber())
  {if (OrderType() == OP_SELL)
  {OrderClose(OrderTicket(),OrderLots(),Ask,1,Black);}}}}
void ts(int cmd)
{ 
   double Point_ = Point;
   if (Digits==3 || Digits==5) Point_=Point*10;
   for (int i=0;i<=OrdersTotal();i++)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (Symbol()==OrderSymbol() && MagicNumber==OrderMagicNumber() && cmd==OrderType() && OrderStopLoss()!=0)
      {
         double sl = 0;
         color  cl;
         if (OrderType()==OP_BUY)
         {
            if (Bid>=OrderOpenPrice()+ActivateTS*Point_)
            {
               if (Bid-OrderStopLoss()>=(StepTS)*Point_)
               { 
                  sl = Bid-StepTS*Point_;
               }
            }
            cl = Blue;
         }
         if (OrderType()==OP_SELL )
         {
            if (Ask<=OrderOpenPrice()-ActivateTS*Point_)
            {
               if (OrderStopLoss()-Ask>=(StepTS)*Point_)
               { 
                  sl = Ask+StepTS*Point_;
               }
            }
            cl = Red;
         }
         if (sl!=0)
         {
            int ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,cl);
            if (ticket<=0) Print(ErrorDescription(GetLastError()));
         }
      }
   }
}
Ten EA nie działa. teraz wiem, ze jest to przez zbyt niski SL. Potrzebne by były 2 modyfikacje tego kodu:
1. Ten EA otwiera i zamyka transakcje. Dałoby się go przerobić tak, żeby tylko otwierał transakcje?
2. Zamiast SL trzeba by było wprowadzić, tak jak wspomniałeś, zamknięcie przez egzekucję.
Z góry dziękuję za pomoc.

Dodano po 6 godzinach 33 minutach:

Odnośnie egzekucji znalazłem to:

Kod: Zaznacz cały

bool OrderClose (int ticket, double lots, double price, int slippage, color Color=CLR_NONE)
Tylko nie do końca wiem jak to wpleść w kod.

A jeśli chodzi o to, by kod tylko otwierał zlecenia. Usunąłem z kodu ZamknijSell(), ZamknijBuy() oraz

Kod: Zaznacz cały

void ZamknijBuy()
{int i;
 for (i = 0; i < OrdersTotal(); i++)
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber())
  {if (OrderType() == OP_BUY)
  {OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);}}}}

void ZamknijSell()
{int i;
 for (i = 0; i < OrdersTotal(); i++)
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber())
  {if (OrderType() == OP_SELL)
  {OrderClose(OrderTicket(),OrderLots(),Ask,1,Black);}}}} 
Niestety, po usunięciu tych elementów EA nie działa tak, jakbym chciał. Chyba coś za mało usunąłem. Zastanawiam się nad warunkami:

Kod: Zaznacz cały

   if(total(OP_BUY)==0&&it1>0&&it2<=0){send(OP_BUY);ZamknijSell();}
   if(total(OP_SELL)==0&&it1<0&&it2>=0){send(OP_SELL);ZamknijBuy();} 
Poza usunięciem wspomnianych ZamknijSell i Buy chyba coś jeszcze trzeba usunąc. Coś z tego 0&&it1<0&&it2>=0, coś zmienić ale nie wiem dokładnie coś.
Ma może ktoś jakiś pomysł?

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Kod: Zaznacz cały

#include <stdlib.mqh> 
int MagicNumber    = 888634; 
extern double lot          = 1; 
extern int    StopLoss  = 3; 
extern int    intensity    = 18; 
extern int    periods      = 800; 
extern bool   TrailingStop = true; 
extern int    ActivateTS   = 1; 
extern int    StepTS       = 10; 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void init() 
{} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void deinit() 
{} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void start() 
{ 
   double it1 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,0); 
   double it2 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,1); 
   //trailing stop 
   if (total(OP_BUY )>0 && TrailingStop==true) ts(OP_BUY ); 
   if (total(OP_SELL)>0 && TrailingStop==true) ts(OP_SELL); 
   if(total(OP_BUY)==0&&it1>0&&it2<=0)send(OP_BUY);
   if(total(OP_SELL)==0&&it1<0&&it2>=0)send(OP_SELL); 
} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
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) 
{ 
   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 = 0; 
      sl = Ask-StopLoss*Point_; 
      cl = Blue; 
   } 
   if (cmd==OP_SELL) 
   { 
      pr = Bid; 
      tp = 0; 
      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())); 
} 
///////////////////////////////////////////////////////////////////////// 
void ZamknijBuy() 
{int i; 
 for (i = 0; i < OrdersTotal(); i++) 
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber()) 
  {if (OrderType() == OP_BUY) 
  {OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);}}}} 

void ZamknijSell() 
{int i; 
 for (i = 0; i < OrdersTotal(); i++) 
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber()) 
  {if (OrderType() == OP_SELL) 
  {OrderClose(OrderTicket(),OrderLots(),Ask,1,Black);}}}} 
void ts(int cmd) 
{ 
   double Point_ = Point; 
   if (Digits==3 || Digits==5) Point_=Point*10; 
   for (int i=0;i<=OrdersTotal();i++) 
   { 
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES); 
      if (Symbol()==OrderSymbol() && MagicNumber==OrderMagicNumber() && cmd==OrderType() && OrderStopLoss()!=0) 
      { 
         double sl = 0; 
         color  cl; 
         if (OrderType()==OP_BUY) 
         { 
            if (Bid>=OrderOpenPrice()+ActivateTS*Point_) 
            { 
               if (Bid-OrderStopLoss()>=(StepTS)*Point_) 
               { 
                  sl = Bid-StepTS*Point_; 
               } 
            } 
            cl = Blue; 
         } 
         if (OrderType()==OP_SELL ) 
         { 
            if (Ask<=OrderOpenPrice()-ActivateTS*Point_) 
            { 
               if (OrderStopLoss()-Ask>=(StepTS)*Point_) 
               { 
                  sl = Ask+StepTS*Point_; 
               } 
            } 
            cl = Red; 
         } 
         if (sl!=0) 
         { 
            int ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,cl); 
            if (ticket<=0) Print(ErrorDescription(GetLastError())); 
         } 
      } 
   } 
}
W taki sposób tylko otwiera zlecenie, a nie zamyka przeciwnego. O to Ci chodziło ?
Jeśli chodzi o zamykanie poprzez egzekucję to zrobię to w pierwszej wolnej chwili, bo mam zawalony grafik.
Solą życia jest kasa.

ebate
Stały bywalec
Stały bywalec
Posty: 24
Rejestracja: 18 mar 2012, 21:06

Nieprzeczytany post autor: ebate »

Dokładnie o to. Miało tylko otwierać zlecenia. Zamykaniem zleceń ma zająć się TS oraz SL ( a raczej słynna "egzekucja"). I nie ma problemu, zrób kiedy tylko będziesz chciał, jestem Ci ogromnie wdzięczny za to, co dotychczas zrobiłeś dla mnie. Dziekuję.

ODPOWIEDZ