Close all positive EA

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
marek8
Gaduła
Gaduła
Posty: 288
Rejestracja: 26 lis 2011, 17:17

Close all positive EA

Nieprzeczytany post autor: marek8 »

Witam wszystkich,
ten skrypt zamyka wszystkie zarabiające pozycje - chodzi "przerobienie" na podobne EA , które by zamykało tak samo , lecz z ustawianiem częstotliwości - np. close all positive co 60 min. ?
Dziekuję

//+------------------------------------------------------------------+
//| CloseAllPositive Scripts by ***NicoMax*** |
//| |
//| Close All Open order with positive profit |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
extern int Slippage = 1;

int start()
{
bool Result;
int Pos,Error,Total;
for(int i=1; i<=OrdersTotal(); i++)
{
if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
if ( OrderProfit()>1)
{
Pos=OrderType();
if(Pos==OP_BUY)
Result=OrderClose(OrderTicket(),
OrderLots(),
Bid,
Slippage,
CLR_NONE);
else
Result=OrderClose(OrderTicket(),
OrderLots(),
Ask,
Slippage,
CLR_NONE);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
Mk 9.23 - "....Wszystko możliwe jest dla tego kto wierzy".

Awatar użytkownika
rayzeel
Gaduła
Gaduła
Posty: 357
Rejestracja: 05 lis 2008, 14:47

Re: Close all positive EA

Nieprzeczytany post autor: rayzeel »

A z tym OrdersTotal() to widziałem motywy, że wywoływanie tej funkcji w pętli powoduje, że nie wszystkie trejdy zostaną zamknięte. To w niektórych wersjach mt4. Lepiej jest wcześniej wwalić to do zmiennej int.

Kod: Zaznacz cały

int start(){
closeAllPositive();
}

void closeAllPositive(){
int total = OrdersTotal();
for(int i=0; i<total; i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
duble profit = OrderProfit();
if(profit>0){
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);
else if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);
}
}
}
}

Lub dla zamknięcia co określoną ilość czasu to wystarczy wywołać funkcję co x minut lub co świecę:

Kod: Zaznacz cały


// co świecę
bool newBar(){
static datetime time;
if(Time[0]!=time){
time = Time[0];
returnm(true);
}
return(false);
}


// wtedy będzie
int start(){
if(newBar())closeAllPositive();
}

// lub co x minut

bool checkpoint(int minutes){
int secs = minutes * 60;
static datetime time;
if(TimeCurrent()>=time){
time = TimeCurrent()+secs;
return(true);
}
return(false);
}



// wtedy w start

extern int Minutes = 10;
int start(){
if(checkpoint(Minutes))closeAllPositive();
}
Pozdrawiam.

Awatar użytkownika
marek8
Gaduła
Gaduła
Posty: 288
Rejestracja: 26 lis 2011, 17:17

Re: Close all positive EA

Nieprzeczytany post autor: marek8 »

z tym orders total to się zgadza - niektóre trejdy się nieraz nie zamykają.
jak z tego "posklejać" całe EA ?- nie jestem orłem programowania ;)
z góry dzięki za za pomoc
Mk 9.23 - "....Wszystko możliwe jest dla tego kto wierzy".

Awatar użytkownika
sgorn
Pasjonat
Pasjonat
Posty: 1208
Rejestracja: 25 paź 2008, 17:29

Re: Close all positive EA

Nieprzeczytany post autor: sgorn »

Wicks reject areas and bodies explore them-MightyOne
Nie ważne czy miałeś rację czy nie,ważne jak dużo zarobiłeś posiadając rację i jak mało straciłeś, myląc się.

Awatar użytkownika
rayzeel
Gaduła
Gaduła
Posty: 357
Rejestracja: 05 lis 2008, 14:47

Re: Close all positive EA

Nieprzeczytany post autor: rayzeel »

Wieczorem postaram się przesłać Ci gotowca, który będzie zamykał zyskowne co X minut z możliwością ustawienia czasu od którego ma zacząć.

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: Close all positive EA

Nieprzeczytany post autor: Pierz Andrzej »

Witam

sprawdź czy to zadziała Ci tak jak chcesz ;)
w funkcji start masz przykłady użycia

Kod: Zaznacz cały

#include <stdlib.mqh>
#define OP_ALL 6

int magic.number = 123456;

void start()
{
   close.all(OP_ALL,+1,60);// zamyka wszystkie otwarte pozycje zyskowne po 60 minutach od otwarcia
   close.all(OP_ALL,-1,60);// zamyka wszystkie otwarte pozycje stratne  po 60 minutach od otwarcia
   close.all(OP_BUY,+1,60);// zamyka wszystkie otwarte Buy pozycje zyskowne po 60 minutach od otwarcia
   close.all(OP_BUY,-1,60);// zamyka wszystkie otwarte Buy pozycje stratne  po 60 minutach od otwarcia
   close.all(OP_SELL,+1,60);// zamyka wszystkie otwarte Sell pozycje zyskowne po 60 minutach od otwarcia
   close.all(OP_SELL,-1,60);// zamyka wszystkie otwarte Sell pozycje stratne  po 60 minutach od otwarcia
   close.all(OP_ALL,0,60);// zamyka wszystkie otwarte pozycje niezaleznie od profitu po 60 minutach od otwarcia
   close.all(OP_ALL,0,60);// zamyka wszystkie otwarte pozycje niezaleznie od profitu  po 60 minutach od otwarcia
   close.all(OP_BUY,0,60);// zamyka wszystkie otwarte Buy pozycje niezaleznie od profitu po 60 minutach od otwarcia
   close.all(OP_BUY,0,60);// zamyka wszystkie otwarte Buy pozycje niezaleznie od profitu  po 60 minutach od otwarcia
   close.all(OP_SELL,0,60);// zamyka wszystkie otwarte Buy pozycje niezaleznie od profitu po 60 minutach od otwarcia
   close.all(OP_SELL,0,60);// zamyka wszystkie otwarte Buy pozycje niezaleznie od profitu  po 60 minutach od otwarcia
   
}

string close.all(int order.type, int order.profit,int time.minutes)
{
   RefreshRates();
   for (int i = OrdersTotal() - 1;i >= 0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (Symbol() == OrderSymbol() && magic.number == OrderMagicNumber() && (order.type == OrderType() || order.type == OP_ALL))
      {
         if ((order.profit == -1 && OrderProfit() < 0) || (order.profit == +1 && OrderProfit() > 0) || (order.profit == 0))
         {
            if (TimeCurrent() - OrderOpenTime() >= time.minutes * 60)
            {
               bool ticket = true;
               if (OrderType() == OP_BUY ) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,0,Blue);
               if (OrderType() == OP_SELL) ticket = OrderClose(OrderTicket(),OrderLots(),Ask,0,Red );
               if (ticket == false) Print("Error close "+ErrorDescription(GetLastError()));
            }
         }
      }
   }
}
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
rayzeel
Gaduła
Gaduła
Posty: 357
Rejestracja: 05 lis 2008, 14:47

Re: Close all positive EA

Nieprzeczytany post autor: rayzeel »

Kod w załączniku zamyka pozycje z zyskiem większym od X co określoną liczbę minut poczynając od zadeklarowanego czasu startowego. Pozdrawiam.

PS: Jest to expert
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
marek8
Gaduła
Gaduła
Posty: 288
Rejestracja: 26 lis 2011, 17:17

Re: Close all positive EA

Nieprzeczytany post autor: marek8 »

Dzięki ,
oto chodziło,
przyda się :)
pozdrawiam
Mk 9.23 - "....Wszystko możliwe jest dla tego kto wierzy".

ODPOWIEDZ