Jak zamknąć zlecenia o ustalonej wartości zysków (Profit)?

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

masz racje :)

za dlugo przed ea i juz nie mysle :(

dzieki za ten kod tylko tyle mi brakowalo
z poważaniem
Andrzej Pierz
FOREX-SERVICE

STORNO
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 27 sty 2008, 11:09

Potrzebuję EA sygnału dźwiękowego przy zamknięciu zl

Nieprzeczytany post autor: STORNO »

Potrzebuję do tego EA sygnału dźwiękowego przy zamknięciu zleceń.

Kod: Zaznacz cały

extern double closeProfit=10; 

int start() 
  { 
//---- 
  bool   result, ord2close; 
  int i, cmd; 
  double price, profit = 0; 

//---- 
  for(i=0; i<OrdersTotal(); i++) { 
    OrderSelect(i, SELECT_BY_POS); 
    profit += OrderProfit(); 
  } 
  if(profit >= closeProfit) { 
    for(i=0; i<OrdersTotal(); i++) { 
      OrderSelect(i, SELECT_BY_POS); 
      cmd = OrderType(); 
      if(cmd < 2) { 
        i--; 
        result = false; 
        while(result != true) { 
          if(cmd == OP_BUY) price = MarketInfo(OrderSymbol(),MODE_BID); 
          else              price = MarketInfo(OrderSymbol(),MODE_ASK); 
          result = OrderClose(OrderTicket(), OrderLots(), price, 3, CLR_NONE); 
          RefreshRates(); 
        } 
      } 
    } 
  } 
//---- 
   return(0); 
  } 

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

STORNO pisze:Potrzebuję do tego EA sygnału dźwiękowego przy zamknięciu zleceń.
Po OrderClose wstaw sobie:

Kod: Zaznacz cały

Alert("Zlecenie zamknieto.");
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

kowal00
Gaduła
Gaduła
Posty: 102
Rejestracja: 07 lut 2009, 19:49

Nieprzeczytany post autor: kowal00 »

Witam
Zeby nie zakladac osobnego watku bo chodzi o to samo co w temacie:
Jak zmienic kod aby dzialal w ten sposob:
Otwieramy pozycje buy np: ask-1.000,bid-0.998, cena idzie do gory ask-1.005,bid-1.002 (mamy 2 pipsy na +) i teraz 2 przypadki:
1-cena spada-kod zamyka pozycje na+1(cos w stylu BE)
2-cena rosnie-dziala TS
Mam nadzieje, ze nie zagmatwalem za bardzo :oops:
Korzystam z takiego TS:
Pozdrawiam

Kod: Zaznacz cały

int TS_Distance  = Ts_odl. ;            
int TS_ActivatedLevel = Ts_poziom ;    
if( (OrderType() == OP_BUY) && (Bid > (OrderOpenPrice() + TS_ActivatedLevel*Point)) && (OrderStopLoss() < (Bid - TS_Distance*Point))) {
     if(!OrderModify(OrderTicket(), OrderOpenPrice(), (Bid - TS_Distance*Point), OrderTakeProfit(), OrderExpiration(), Yellow)) {
          Print(ErrorDescription(GetLastError())); return(0);
     }
}

if((OrderType() == OP_SELL) && (Ask < (OrderOpenPrice() - TS_ActivatedLevel*Point)) && (OrderStopLoss() > (Ask + TS_Distance*Point))) {
      if(!OrderModify(OrderTicket(), OrderOpenPrice(), (Ask + TS_Distance*Point), OrderTakeProfit(), OrderExpiration(), Yellow)) {
          Print(ErrorDescription(GetLastError())); return(0);
      }

STORNO
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 27 sty 2008, 11:09

Nieprzeczytany post autor: STORNO »

Potrzebuję modyfikacji poniższego skryptu.
Chodzi mi o to żeby zamykał zlecenia każdej otwartej pary z określonym zyskiem (profit).
Poniższy skrypt zamyka wszystkie na raz zlecenia, a ja chcę żeby zamykał indywidualnie każdą parę oddzielnie gdzie mają dodatni profit.

Kod: Zaznacz cały

extern double closeProfit=30; 

int start() 
  { 
//---- 
  bool   result, ord2close; 
  int i, cmd; 
  double price, profit = 0; 

//---- 
  for(i=0; i<OrdersTotal(); i++) { 
    OrderSelect(i, SELECT_BY_POS); 
    profit += OrderProfit(); 
  } 
  if(profit >= closeProfit) { 
    for(i=0; i<OrdersTotal(); i++) { 
      OrderSelect(i, SELECT_BY_POS); 
      cmd = OrderType(); 
      if(cmd < 2) { 
        i--; 
        result = false; 
        while(result != true) { 
          if(cmd == OP_BUY) price = MarketInfo(OrderSymbol(),MODE_BID); 
          else              price = MarketInfo(OrderSymbol(),MODE_ASK); 
          result = OrderClose(OrderTicket(), OrderLots(), price, 3, CLR_NONE); 
          RefreshRates(); Alert("Zlecenie zamknieto.");
        } 
      } 
    } 
  } 
//---- 
   return(0); 
  } 


rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

STORNO pisze:Potrzebuję modyfikacji poniższego skryptu.
Chodzi mi o to żeby zamykał zlecenia każdej otwartej pary z określonym zyskiem (profit).
Po prostu Trailing Stop ustaw.

Natomiast co do pilnowania zysków, to ja stosuję taki EA. UWAGA!!!! EA można uruchomić, gdy jest już jakiś konkretny zysk wypracowany.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                     zamknij_gdy_profit_spada.mq4 |
//|                      Copyright © 2010, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double  max_obsuwa=30;
extern double  zysk=0;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----


if (zysk<AccountProfit())
   zysk=AccountProfit();
   
Comment("Akceptowany poziom obsuwy=", max_obsuwa, "%", "\nMax zarejestrowany zysk=", zysk, "\nObsuwa od max=", DoubleToStr(100*(zysk-AccountProfit())/zysk, 0), "%");

if (zysk * (100-max_obsuwa)/100 > AccountProfit())
   for (int i=OrdersTotal()-1; i>=0; i--)
      {
      Alert("Zlecenie nr= ", i, " z ", OrdersTotal());
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
         {
         Alert("Error in history!");
         break;
         }
       Alert(Symbol(), " Ticket: ", OrderTicket());  

       switch(OrderType())
         {
         case OP_SELL:
         
                              OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5);                         
                              Sleep(100);
                              Alert(OrderSymbol(), " Usuwam zlecenie nr: ", OrderTicket(), "wynik: ", GetLastError());
                              break;
                                    
         case OP_BUY:
      
                              OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5);                         
                              Sleep(100);
                              Alert(OrderSymbol(), " Usuwam zlecenie nr: ", OrderTicket(), "wynik: ", GetLastError());
                              break;
                                    

         default:             
                              OrderDelete(OrderTicket());
                              Sleep(100);        
                              Alert(OrderSymbol(), " Usuwam zlecenie nr: ", OrderTicket(), "wynik: ", GetLastError());
                              break;
          
                          
         }

      } //for 

   
//----
   return(0);
  }
//+------------------------------------------------------------------+
Ostatnio zmieniony 27 lis 2010, 14:00 przez rrozak, łącznie zmieniany 1 raz.

STORNO
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 27 sty 2008, 11:09

Nieprzeczytany post autor: STORNO »

zbyt łatwe i nie efektowne .... przepraszam ale nie takiej odpowiedzi oczekiwałem ...... sorry

Dodano po 7 minutach:

ciekawe ale jak czaisz w pisaniu skryptów to zobacz co da się z tym moim skryptem zrobić .... o co proszę ..... będzie mi miło .....

rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

STORNO pisze:zbyt łatwe i nie efektowne .... przepraszam ale nie takiej odpowiedzi oczekiwałem ...... sorry
Więc ustaw TS i puść fajerwerka :) Będzie i skutecznie i efektownie :)

ODPOWIEDZ