Jump to content
Co nového? Mé kurzy
Komunita:
Diskuze Sledované příspěvky Žebříčky

Programování v MT4


BigBull

Doporučené příspěvky

Robe,
těch důvodů, proč se příkaz nevyplní může být hodně. Nemusíš mít dost volného kapitálu, broker zablokoval účet.... . Proto musíš dodržovat programátorskou zásadu - vždy si ověřovat, že příkaz prošel a případně podle návratové hodnoty zahlásit nějaký problém, aby na něj obsluha mohla zareagovat. To v kódu nemáš a tak se na něj nemůžeš spolehnout, že vždy udělá přesně to, co požaduješ. Proto si tam doplň něco takového:

ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,"dolu",1,0,Green);


if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
Print("Prodejni prikaz ",ticket," na ",symbol," byl uspesne odeslan.");
return(0);
}
else
{
Print("Prodejni prikaz vraci chybu : ",GetLastError());
return(-1);
}
}


Potom podle kódu chyby poznáš, k jakému problému došlo a podle toho se zachováš.

Link to comment
Sdílet pomocí služby

  • Odpovědí 583
  • Vytvořeno
  • Poslední

Nejaktivnější diskutující

Nejaktivnější diskutující

Publikované obrázky

Zkusím,já myslel,že když to proháním testerem strategií,tak na těhle věcech nezáleží.A musí to otevírat příkaz
na každém OPEN.Spíš jsem si říkal,jestli MT4 chodí pod win7 regulerně,někde jsem tuším četl nějaké problémy,nebo jestli to není chybou dat v historii dat atd.
Rob.

Link to comment
Sdílet pomocí služby

Zdravím,
potreboval by som upraviť alert u indikátora, ktorý by sa mohol hodiť aj niekomu inému. Je to indikátor na brejky z range. Keď sa cena príliš nehýbe vytvorí indikátor dve úrovne a pri ich prekročení spustí alert. V nastavení indikátora sa dá zvoliť koľko prekročení úrovní je platných. Problém je v tom, že alert indikátora nerešpektuje nastavený počet platných prekročení, ale spustí sa po každom prekročení úrovní. Na grafe zobrazuje indikátor obmedzenie správnych prekročení správne.

Link to comment
Sdílet pomocí služby

  • 2 týdny později...

Ahoj,

jako trader - neprogramator - bych se na vas rad obratil s prosbou o naprogramovani jednoho systemu.
Backtest mi vysel pekne, uz to chvilku obchoduju diskrecne a nevychazi to spatne. Ale rikal jsem si, ze by to mohlo jit docela pekne zautomatizovat. Nejdriv na projeti historickych dat, doladeni parametru, pak chvilku na demu a kdyz to prezije, tak to spustit live. Pokud by se nekdo nasel nekdo jako BigBull na prvni strance tohoto fora, kdo umi programovat a ma cas, tak se ozvete. O konecny vytvor se rad podelim s ostatnimi. Jen pro info - vychazi to z J.Rosse v kombinaci s MA.

Tradingu zdar a Forexu zvlast :)

J.

Link to comment
Sdílet pomocí služby

Zdravím Vás. Nemůže mě nekdo popostrčit s indikatorem na zbarveni svicek.Aby bylo mozne nastavit odlisne zbarveni treba deset pips od open nahoru nebo dolu. Abych mel moznost v grafu videt kdy mi svice presahuje vyssi hodnotu nez mam nastaveno od otevreni. Nikde jsem to nenasel a treba to nekdo ze tkusenych dokaze vyhodit z hlavy, pokud to neni moc narocne. Nebo jestli nevite zda uz indikator neexistuje.
Diky za odpoved :S

Link to comment
Sdílet pomocí služby

hi all. Nejsem programator a potreboval bych od nakyho programatora poradit jaky kodovy radek v tomto EA (priloha) urcuje, zda ma mit EA oterenou maximalne jednu pozici v jeden cas nebo muze otevrit nekonecno pozic. EA je defaultne nastaveno na 1 pozice/ v jeden cas. Potreboval bych to zmenit, aby to mohlo vstoupit postupne treba do 10 pozic (bez toho aby se ty predesly museli nejdric uzavirat) diky.

17866

Link to comment
Sdílet pomocí služby

  • 2 týdny později...
  • 3 týdny později...

tak jsem to vygooglil, tak to sem dam:

1. If trading a USDxxx pair:
Margin = StandardLot * LotSize / Leverage

Example (trading 0.1 lots of USDJPY):
Margin = 100,000 * 0.1 / 200 = 50 USD set aside as margin (used margin).
2. If trading a xxxUSD pair:
Margin = StandardLot * quote * LotSize / Leverage

Example (trading 0.5 lots of GBPUSD @ 1.3982):
Margin = 100,000 * 1.3982 * 0.5 / 200 = 349.55 USD.
3. If trading a cross pair (like GBPJPY):

This is basically the same as the xxxUSD example above. Once again we are buying the xxx currency, except this time we are paying for it in some other currency, not USD. But the amount we need to set aside as margin is the same as if we bought the xxxUSD pair. The only complication we might have is if the xxxUSD quote is not xxxUSD but actually USDxxx. This would be the case with a pair like CHFJPY, since the USD pair is expressed as USDCHF, not CHFUSD. In this case we will need to use (1 / USDxxx quote) below, instead of (xxxUSD quote).

Margin = StandardLot * (xxxUSD quote) * LotSize / Leverage

Example (trading 0.2 lots of GBPJPY with GBPUSD @ 1.3982):
Margin = 100,000 * 1.3982 * 0.2 / 200 = 139.82 USD.

Link to comment
Sdílet pomocí služby

  • 1 month later...

Měl bych prosbu. Mohl by mi prosím někdo přeložit na základě čeho program vstupuje a vystupuje z obchodu a co to je za globální proměnou MACDOpenLevel MACDCloseLevel?



extern double TakeProfit = 50;
extern double Lots = 0.1;
extern double TrailingStop = 30;
extern double MACDOpenLevel=3;
extern double MACDCloseLevel=2;
extern double MATrendPeriod=26;

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
double MacdCurrent, MacdPrevious, SignalCurrent;
double SignalPrevious, MaCurrent, MaPrevious;
int cnt, ticket, total;
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external
// variables (Lots, StopLoss, TakeProfit,
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
if(Bars {
Print("bars less than 100");
return(0);
}
if(TakeProfit {
Print("TakeProfit less than 10");
return(0); // check TakeProfit
}
// to simplify the coding and speed up access
// data are put into internal variables
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);

total=OrdersTotal();
if(total {
// no opened orders identified
if(AccountFreeMargin() {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// check for long position (BUY) possibility
if(MacdCurrentSignalCurrent && MacdPrevious MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
// check for short position (SELL) possibility
if(MacdCurrent>0 && MacdCurrentSignalPrevious &&
MacdCurrent>(MACDOpenLevel*Point) && MaCurrent {
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
// it is important to enter the market correctly,
// but it is more important to exit it correctly...
for(cnt=0;cnt {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType() OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?
if(MacdCurrent>0 && MacdCurrentSignalPrevious &&
MacdCurrent>(MACDCloseLevel*Point))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
return(0); // exit
}
// check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss() {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// should it be closed?
if(MacdCurrentSignalCurrent &&
MacdPrevious(MACDCloseLevel*Point))
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
return(0); // exit
}
// check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
// the end.

Link to comment
Sdílet pomocí služby

  • 3 týdny později...

ahoj traderi a programatori chcel by som vas poziadat o pomoc pri vytvoreni jednoducheho indikatora. sam neprogramujem a nikde neviem najst takyto velmi jednoduchy indikator ktory by som chcel pouzit pri mojej buducej strategii. Indikator by mal pracovat iba z high a low, a urcit presnu polovicu sviece po uzatvoreni alebo aj v priebehu pohybu, cize kazda svieca by mala byt predelena v 50% svojej velkosti verim ze vy tento "indikator" naprogramujete behom par minut no ja by som s tim stravil niekolko tyzdnov ci mesiacov kym by som len pochopil programovanie za funkcne riesenie mojho problemu vopred dakujem :)

18788

Link to comment
Sdílet pomocí služby


×
×
  • Vytvořit...