Modyfikacja wybranego zlecenia

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Modyfikacja wybranego zlecenia

Nieprzeczytany post autor: siersciuch »

Jak moge otworzyć zlecenie z odrazu przypisanym ticketem, chodzi mi oto, zebym mógł później wybrane zlecenie modyfkiować.

w orderselect i modify jest ten ticket wiec wszystko gra, ale w Ordersend niema, tym magickem mozna to wszystko połaczyć?

wszystko by było jaśniejsze jakbym otwierał tylko jedno zlecenie naraz, ale pod warunkiem na otwarcie zlecenia chce mieć pare, puxniej kazde zlecenie chce oddziennie modyfikować.



Kod: Zaznacz cały

int OrderSend( string symbol, int cmd, double volume, double price, int
slippage, double stoploss, double takeprofit, string comment=NULL, int
magic=0, datetime expiration=0, color arrow_color=CLR_NONE )


(OrderSelect(ticket, SELECT_BY_TICKET)


bool OrderModify( int ticket, double price, double stoploss, double
takeprofit, datetime expiration, color arrow_color=CLR_NONE)
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

OrderSend zwraca Ci na wyjsciu numer ticketu

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

Kod: Zaznacz cały

int poz1long = OrderSend(..)

   OrderSelect(poz1long,SELECT_BY_TICKET,MODE_TRADES);
  
OrderModify(poz1long,.................................);

tak to ma wyglądac??????
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

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

Nieprzeczytany post autor: Pierz Andrzej »

tak

Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

Jak kompiluje to zero błedów, ale na testach

OrderModify error 4051
invalid ticket for OrderModify function


moze ktoś mi to sprawdzi nalepiej bedzie, niemoge znaleść przyczyny tych błedów

Kod: Zaznacz cały

int sl=34;
double lots=0.1;
int buyx, sellx;
int poz1long, poz2long, poz3long, poz1short, poz2short, poz3short;


int init()
  {
return(0);
  }
int deinit(){ return(0);}



int start()
{

BE_long_poz1();
BE_long_poz2();
BE_long_poz3();
   
BE_short_poz1();
BE_short_poz2();
BE_short_poz3();


double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);

   if(total(OP_BUY)==0 && Ask>ma && buyx==0)
   {
   int poz1long = OrderSend(Symbol(),OP_BUY,lots,Ask,3,Bid-sl*Point,Bid+34*Point);
   int poz2long = OrderSend(Symbol(),OP_BUY,lots,Ask,3,Bid-sl*Point,Bid+55*Point);   
   int poz3long = OrderSend(Symbol(),OP_BUY,lots,Ask,3,Bid-sl*Point,Bid+89*Point); 

   buyx=1;
   sellx=0;
   }


   if(total(OP_SELL)==0 && Bid<ma && sellx==0)
   {
   int poz1short = OrderSend(Symbol(),OP_SELL,lots,Bid,3,Ask+sl*Point,Ask-34*Point);
   int poz2short = OrderSend(Symbol(),OP_SELL,lots,Bid,3,Ask+sl*Point,Ask-55*Point);   
   int poz3short = OrderSend(Symbol(),OP_SELL,lots,Bid,3,Ask+sl*Point,Ask-89*Point);   
   
   buyx=0;
   sellx=1;
   }
 
return(0);
}


int MagicNumber, cmd;

int total(int cmd)
{
   int sum = 0;
   RefreshRates();
   for (int i=0;i<=OrdersTotal();i++)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (Symbol()==OrderSymbol() && cmd==OrderType() && MagicNumber==OrderMagicNumber()) sum++;
   }
   return(sum);
}


void BE_long_poz1()
{
   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);
   if (buyx==1)
   {
   OrderSelect(poz1long,SELECT_BY_TICKET,MODE_TRADES);
   OrderModify(poz1long,OrderOpenPrice(),ma-34*Point,ma+34*Point,OrderExpiration(),CLR_NONE);
   }
}

void BE_long_poz2()
{

   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);

   if (Bid<ma+34*Point)
   {
   OrderSelect(poz2long,SELECT_BY_TICKET,MODE_TRADES);
   OrderModify(poz2long,OrderOpenPrice(),ma-34*Point,ma+34*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid>ma+34*Point)
   {
   OrderSelect(poz2long,SELECT_BY_TICKET,MODE_TRADES);
   OrderModify(poz2long,OrderOpenPrice(),ma+1*Point,ma+55*Point,OrderExpiration(),CLR_NONE);
  
   }
}

void BE_long_poz3()
{

   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);
   
   
   if (Bid<ma+34*Point)
   {
   OrderSelect(poz3long,SELECT_BY_TICKET);
   OrderModify(poz3long,OrderOpenPrice(),ma-34*Point,ma+34*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid>ma+34*Point)
   {
   OrderSelect(poz3long,SELECT_BY_TICKET);
   OrderModify(poz3long,OrderOpenPrice(),ma+1*Point,ma+55*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid>ma+55*Point)
   {
   OrderSelect(poz3long,SELECT_BY_TICKET);
   OrderModify(poz3long,OrderOpenPrice(),ma+34*Point,ma+89*Point,OrderExpiration(),CLR_NONE);
   }
}

void BE_short_poz1()
{
   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);
   if (sellx==1)
   {
   OrderSelect(poz1short,SELECT_BY_TICKET);
   OrderModify(poz1short,OrderOpenPrice(),ma+34*Point,ma-34*Point,OrderExpiration(),CLR_NONE);
   }
}

void BE_short_poz2()
{

   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);

   if (Bid<ma-34*Point)
   {
   OrderSelect(poz2short,SELECT_BY_TICKET);
   OrderModify(poz2short,OrderOpenPrice(),ma+34*Point,ma-34*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid>=ma-34*Point)
   {
   OrderSelect(poz2short,SELECT_BY_TICKET);
   OrderModify(poz2short,OrderOpenPrice(),ma-1*Point,ma-55*Point,OrderExpiration(),CLR_NONE);
   }
}

void BE_short_poz3()
{

   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);
   
   
   if (Bid<ma-34*Point)
   {
   OrderSelect(poz3short,SELECT_BY_TICKET);
   OrderModify(poz3short,OrderOpenPrice(),ma+34*Point,ma-34*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid<ma-34*Point)
   {
   OrderSelect(poz3short,SELECT_BY_TICKET);
   OrderModify(poz3short,OrderOpenPrice(),ma-1*Point,ma-55*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid<ma-55*Point)
   {
   OrderSelect(poz3short,SELECT_BY_TICKET);
   OrderModify(poz3short,OrderOpenPrice(),ma-34*Point,ma-89*Point,OrderExpiration(),CLR_NONE);
   }
}
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

tak na szybko, nie analizujac kodu, tylko zerkajac rzucaja sie...

1.)

Kod: Zaznacz cały

int poz1short 
zdeklarowales ta zmienna w funkcji start (i pozostale dwie) wiec jej widocznosc jest tylko w ramach funkcji start.

Masz dwie mozliwosci,
a) Albo te zmienne przekarzesz jako paramter w funkcjach BE_...
b) Albo deklarujesz jako zmienna globalne (poza funkcja start)
i widoczne beda we wszystkich funkcjach

2)

Kod: Zaznacz cały

ma-34*Point
Używaj NormalizeDouble() bo czesto moga byc klopoty, "ma" ma tak na prawde dokladnosc wieksza niz np. 4 miejsca po przecinku, a "OrderSelect/OrderModify() moze oczekiwac tylko 4 miejsc po przecinku)

Awatar użytkownika
xpep
Pasjonat
Pasjonat
Posty: 844
Rejestracja: 02 gru 2007, 11:50

Nieprzeczytany post autor: xpep »

zamiast

Kod: Zaznacz cały

OrderSelect(poz1long,SELECT_BY_TICKET,MODE_TRADES); 
   OrderModify(poz1long,OrderOpenPrice(),ma-34*Point,ma+34*Point,OrderExpiration(),CLR_NONE);
daj

Kod: Zaznacz cały

if ( OrderSelect(poz1long,SELECT_BY_TICKET) ) 
   OrderModify(OrderTicket(),OrderOpenPrice(),ma-34*Point,ma+34*Point,OrderExpiration(),CLR_NONE);
jak jedziesz po ticketach to nie ma podzialu na mode_trades i mode_history
Ostatnio zmieniony 30 mar 2011, 10:51 przez xpep, łącznie zmieniany 1 raz.

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

Utawiłęm jako globalne, ale dalej ten sam błąd z ticketem

OrderModify error 4108
invalid ticket for OrderModify function



A NormalizeDouble() w start ją wpisać? trzeba jakieś parametry wpisać w nawias?


Kod: Zaznacz cały

int poz1long, poz2long, poz3long, poz1short, poz2short, poz3short;


int init()
  {
return(0);
  }
int deinit(){ return(0);}

int start()
{

BE_long_poz1();
BE_long_poz2();
BE_long_poz3();
   
BE_short_poz1();
BE_short_poz2();
BE_short_poz3();

double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);

   if(total(OP_BUY)==0 && Ask>ma && buyx==0)
   {
   poz1long = OrderSend(Symbol(),OP_BUY,lots,Ask,3,Bid-sl*Point,Bid+34*Point);
   poz2long = OrderSend(Symbol(),OP_BUY,lots,Ask,3,Bid-sl*Point,Bid+55*Point);   
   poz3long = OrderSend(Symbol(),OP_BUY,lots,Ask,3,Bid-sl*Point,Bid+89*Point); 

   buyx=1;
   sellx=0;
   }


   if(total(OP_SELL)==0 && Bid<ma && sellx==0)
   {
   poz1short = OrderSend(Symbol(),OP_SELL,lots,Bid,3,Ask+sl*Point,Ask-34*Point);
   poz2short = OrderSend(Symbol(),OP_SELL,lots,Bid,3,Ask+sl*Point,Ask-55*Point);   
   poz3short = OrderSend(Symbol(),OP_SELL,lots,Bid,3,Ask+sl*Point,Ask-89*Point);  
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

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

Nieprzeczytany post autor: Tig3r »

1- nadaj na starcie tickom wartość -1,
i zanim przestawisz na BE spawdzaj czy ticket jest >= 0

Jak możesz przestawiać na BE jak jeszcze nie zawarłeś transakcji?
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

OrderModify error 4108 unknown ticket for OrderModify function

nie znany ticket, nie moge rozkiminić dlaczego nie znany jak kazda zlecenie ma dopisany ticket


Myśle, próbuje, ale jakos nie moge rozkminić oco chodzi z tym błedem Może, ktoś znajdzie bład, coś nie tak jest z


Kod: Zaznacz cały

int sl=34;
double lots=0.1;
int buyx, sellx;
int poz1long =-1;
int poz2long =-1;
int poz3long =-1;
int poz1short =-1;
int poz2short =-1;
int poz3short =-1;


int init()
  {
return(0);
  }
int deinit(){ return(0);}

int start()
{
if(poz1long>=0) BE_long_poz1();
if(poz2long>=0) BE_long_poz2();
if(poz3long>=0) BE_long_poz3();
   
if(poz1short>=0) BE_short_poz1();
if(poz2short>=0) BE_short_poz2();
if(poz3short>=0) BE_short_poz3();

double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);

   if(total(OP_BUY)==0 && Ask>ma && buyx==0)
   {
   poz1long = OrderSend(Symbol(),OP_BUY,lots,Ask,3,Bid-sl*Point,Bid+34*Point);
   poz2long = OrderSend(Symbol(),OP_BUY,lots,Ask,3,Bid-sl*Point,Bid+55*Point);   
   poz3long = OrderSend(Symbol(),OP_BUY,lots,Ask,3,Bid-sl*Point,Bid+89*Point); 

   buyx=1;
   sellx=0;
   }


   if(total(OP_SELL)==0 && Bid<ma && sellx==0)
   {
   poz1short = OrderSend(Symbol(),OP_SELL,lots,Bid,3,Ask+sl*Point,Ask-34*Point);
   poz2short = OrderSend(Symbol(),OP_SELL,lots,Bid,3,Ask+sl*Point,Ask-55*Point);   
   poz3short = OrderSend(Symbol(),OP_SELL,lots,Bid,3,Ask+sl*Point,Ask-89*Point);   
   
   buyx=0;
   sellx=1;
   }
 
return(0);
}


int MagicNumber, cmd;

int total(int cmd)
{
   int sum = 0;
   RefreshRates();
   for (int i=0;i<=OrdersTotal();i++)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (Symbol()==OrderSymbol() && cmd==OrderType() && MagicNumber==OrderMagicNumber()) sum++;
   }
   return(sum);
}


void BE_long_poz1()
{
   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);
   if (ma-34*Point<Bid<ma+34*Point)
   {
   OrderSelect(poz1long,SELECT_BY_TICKET);
   OrderModify(poz1long,OrderOpenPrice(),ma-34*Point,ma+34*Point,OrderExpiration(),CLR_NONE);
   }
}

void BE_long_poz2()
{

   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);

   if (Bid<ma+34*Point)
   {
   OrderSelect(poz2long,SELECT_BY_TICKET);
   OrderModify(poz2long,OrderOpenPrice(),ma-34*Point,ma+34*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid>ma+34*Point)
   {
   OrderSelect(poz2long,SELECT_BY_TICKET);
   OrderModify(poz2long,OrderOpenPrice(),ma+1*Point,ma+55*Point,OrderExpiration(),CLR_NONE);
  
   }
}

void BE_long_poz3()
{

   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);
   
   
   if (Bid<ma+34*Point)
   {
   OrderSelect(poz3long,SELECT_BY_TICKET);
   OrderModify(poz3long,OrderOpenPrice(),ma-34*Point,ma+34*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid>ma+34*Point)
   {
   OrderSelect(poz3long,SELECT_BY_TICKET);
   OrderModify(poz3long,OrderOpenPrice(),ma+1*Point,ma+55*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid>ma+55*Point)
   {
   OrderSelect(poz3long,SELECT_BY_TICKET);
   OrderModify(poz3long,OrderOpenPrice(),ma+34*Point,ma+89*Point,OrderExpiration(),CLR_NONE);
   }
}

void BE_short_poz1()
{
   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);
   if (ma-34*Point<Bid<ma+34*Point)
   {
   OrderSelect(poz1short,SELECT_BY_TICKET);
   OrderModify(poz1short,OrderOpenPrice(),ma+34*Point,ma-34*Point,OrderExpiration(),CLR_NONE);
   }
}

void BE_short_poz2()
{

   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);

   if (Bid<ma-34*Point)
   {
   OrderSelect(poz2short,SELECT_BY_TICKET);
   OrderModify(poz2short,OrderOpenPrice(),ma+34*Point,ma-34*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid>=ma-34*Point)
   {
   OrderSelect(poz2short,SELECT_BY_TICKET);
   OrderModify(poz2short,OrderOpenPrice(),ma-1*Point,ma-55*Point,OrderExpiration(),CLR_NONE);
   }
}

void BE_short_poz3()
{

   double ma =iMA(NULL, 0, 169, 0, MODE_EMA, PRICE_CLOSE, 0);
   
   
   if (Bid<ma-34*Point)
   {
   OrderSelect(poz3short,SELECT_BY_TICKET);
   OrderModify(poz3short,OrderOpenPrice(),ma+34*Point,ma-34*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid<ma-34*Point)
   {
   OrderSelect(poz3short,SELECT_BY_TICKET);
   OrderModify(poz3short,OrderOpenPrice(),ma-1*Point,ma-55*Point,OrderExpiration(),CLR_NONE);
   }

   if (Bid<ma-55*Point)
   {
   OrderSelect(poz3short,SELECT_BY_TICKET);
   OrderModify(poz3short,OrderOpenPrice(),ma-34*Point,ma-89*Point,OrderExpiration(),CLR_NONE);
   }
}
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

ODPOWIEDZ