[Scrivere un consulente gratis - pagina 83

 
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)
La funzione principale usata per aprire una posizione o piazzare un ordine pendente.
Restituisce il numero del biglietto assegnato all'ordine dal server commerciale o -1 se fallisce. Per ottenere ulteriori informazioni sugli errori, si deve chiamare la funzione GetLastError().
Note:
All'apertura di un ordine di mercato (OP_SELL o OP_BUY), solo gli ultimi prezzi di Bid (per la vendita) o Ask (per l'acquisto) possono essere usati come prezzo aperto. Se l'operazione viene eseguita con un titolo diverso da quello corrente, la funzione MarketInfo() deve essere usata con il parametro MODE_BID o MODE_ASK per ottenere le ultime quotazioni di questo titolo. Il prezzo calcolato o non normalizzato non può essere applicato. Se non c'è stato il prezzo aperto richiesto nel thread del prezzo o non è stato normalizzato secondo la quantità di cifre dopo la virgola, verrà generato l'errore 129 (ERR_INVALID_PRICE). Se il prezzo aperto richiesto è completamente superato, l'errore 138 (ERR_REQUOTE) sarà generato indipendentemente dal parametro slippage. Se il prezzo richiesto non è aggiornato, ma presente nel thread, la posizione sarà aperta al prezzo corrente e solo se il prezzo corrente si trova all'interno della gamma diprezzo+-slippage.

I livelli di StopLoss e TakeProfit non possono essere troppo vicini al mercato. La distanza minima dei livelli di stop in punti può essere ottenuta utilizzando la funzione MarketInfo() con il parametro MODE_STOPLEVEL. In caso di livelli di arresto errati o non normalizzati, verrà generato l'errore 130 (ERR_INVALID_STOPS).

All'immissione di un ordine pendente, il prezzo aperto non può essere troppo vicino al mercato. La distanza minima del prezzo in sospeso da quello corrente del mercato in punti può essere ottenuta usando la funzione MarketInfo() con il parametro MODE_STOPLEVEL. In caso di falso prezzo aperto di un ordine pendente, verrà generato l'errore 130 (ERR_INVALID_STOPS).

L'applicazione del tempo di scadenza dell'ordine pendente può essere disabilitata in alcuni server di trading. In questo caso, quando viene specificato un valore diverso da zero nel parametroexpiration, viene generato l'errore 147 (ERR_TRADE_EXPIRATION_DENIED).

Su alcuni server di trading, la quantità totale di ordini aperti e in sospeso può essere limitata. Se questo limite è stato superato, nessuna nuova posizione sarà aperta (o nessun ordine pendente sarà piazzato) e il server di trading restituirà l'errore 148 (ERR_TRADE_TOO_MANY_ORDERS).
Parametri:
simbolo - Simbolo per il trading.
cmd - Tipo di operazione. Può essere qualsiasi dell'enumerazione delle operazioni commerciali.
volume - Numero di lotti.
prezzo - Prezzo preferito dello scambio.
slittamento - Slittamento massimo del prezzo per gli ordini di acquisto o di vendita.
stoploss - Livello di stop loss.
takeprofit - Livello di take profit.
commento - Testo del commento dell'ordine. L'ultima parte del commento può essere cambiata dal server.
magia - Ordine numero magico. Può essere usato come identificatore definito dall'utente.
scadenza - Tempo di scadenza dell'ordine (solo per gli ordini in sospeso).
colore_freccia - Colore della freccia di apertura sul grafico. Se il parametro manca o ha il valore CLR_NONE la freccia di apertura non viene disegnata sul grafico.
 
#proprietà link "dwgrell@gmail.com"

//--- parametri di ingresso
extern int period=16;
extern int porog=50;

extern double lot=1;
extern inttern k=5000;

extern bool pl=true;
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{
//----

//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int start()
{
double bs=NormalizeDouble(iCustom(Symbol(),0, "Aver",period,0,0),Digits);
double ss=NormalizeDouble(iCustom(Symbol(),0, "Aver",period,1,0),Digits);
double tpb=NormalizeDouble(bs+(bs-ss),Digits);
double tps=NormalizeDouble(ss-(bs-ss),Digits);
if(pl==true)double lots=MathMin(AccountFreeMargin()/k,5);
if(pl==false)lots=lot;
se(OrdiniTotali()==0)
{
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,"",1394,0,Red);//Open Buy Limit.
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);//Open Sell Stop.
}
se(OrdiniTotali()==2)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);//seleziona l'ordine più vicino.
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
if(OrderType()==OP_SELLSTOP&&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
if(OrderType()==OP_SELL&&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSelect(1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
if(OrderType()==OP_SELLSTOP&&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
if(OrderType()==OP_SELL&&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
}
se(OrdiniTotali()==1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY) {OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);}
if(OrderType()==OP_SELL) {OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,",1394,0,Red);}
if(OrderType()==OP_BUYSTOP) {OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);}
if(OrderType()==OP_SELLSTOP){OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,",1394,0,Red);}
}

ritorno(0);
}
//+------------------------------------------------------------------+
 
#property link "dwgrell@gmail.com"

//--- input parameters
extern int period=16;
extern int porog=50;

extern double lot=1;
extern int k=5000;

extern bool pl=true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double bs=NormalizeDouble(iCustom(Symbol(),0,"Aver",period,0,0),Digits);
double ss=NormalizeDouble(iCustom(Symbol(),0,"Aver",period,1,0),Digits);
double tpb=NormalizeDouble(bs+(bs-ss),Digits);
double tps=NormalizeDouble(ss-(bs-ss),Digits);
if(pl==true)double lots=MathMin(AccountFreeMargin()/k,5);
if(pl==false)lots=lot;
if(OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);//Открываем отложник на покупку.
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);//Открываем отложник на продажу.
}
if(OrdersTotal()==2)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);//Выбираем ближайший ордер.
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,0,0,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,0,0,0,Blue);
//if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
//if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSelect(1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,0,0,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,0,0,0,Blue);
//if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
//if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
}
if(OrdersTotal()==1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY) {/*OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);*/
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);}
if(OrderType()==OP_SELL) {/*OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);*/
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);}
if(OrderType()==OP_BUYSTOP) {/*OrderModify(OrderTicket(),bs,ss,tpb,0,Red);*/
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);}
if(OrderType()==OP_SELLSTOP){/*OrderModify(OrderTicket(),ss,bs,tps,0,Blue);*/
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);}
}

return(0);
}
//+------------------------------------------------------------------+
 
Conto: 154603Nome: DmitriyValuta: USD2011 luglio 12, 14:23
Transazioni chiuse:
BigliettoTempo apertoTipoDimensioneArticoloPrezzoS / LT / PTempo di chiusuraPrezzoCommissioneTasseScambiareProfitto
37055732011.07.12 13:57comprare2.16eurusd1.39821.39731.40652011.07.12 14:131.39730.000.000.00-194.40
37053282011.07.12 13:19comprare2.01eurusd1.39241.38991.39482011.07.12 13:491.39480.000.000.00482.40
37053562011.07.12 13:14vendere2.17eurusd1.39001.39241.38762011.07.12 13:191.39240.000.000.00-520.80
37052852011.07.12 13:05vendere2.17eurusd1.39141.39241.39042011.07.12 13:111.39040.000.000.00217.00
37052782011.07.12 13:04comprare2.17eurusd1.39241.39141.39342011.07.12 13:051.39140.000.000.00-217.00
37048122011.07.12 11:32comprare2.40eurusd1.39591.39141.40202011.07.12 13:011.39140.000.000.00-1 080.00
37040302011.07.12 13:01vendere1.88eurusd1.39141.39171.39112011.07.12 13:011.39170.000.000.00-56.40
37041582011.07.12 10:22comprare2.13eurusd1.38961.38981.39582011.07.12 11:301.39580.000.000.001 320.60
37040632011.07.12 10:12comprare2.02eurusd1.38611.38341.38882011.07.12 10:211.38880.000.000.00545.40
37040202011.07.12 10:05comprare1.92eurusd1.38481.38341.38592011.07.12 10:121.38590.000.000.00211.20
37040012011.07.12 10:04vendere1.95eurusd1.38371.38481.38312011.07.12 10:051.38480.000.000.00-214.50
37035052011.07.12 10:01comprare1.82eurusd1.38431.38371.38492011.07.12 10:041.38370.000.000.00-109.20
37039202011.07.12 09:52vendere2.04eurusd1.38451.38431.37552011.07.12 10:011.38430.000.000.0040.80
37036312011.07.12 09:12vendere1.88eurusd1.38921.39351.38492011.07.12 09:501.38490.000.000.00808.40
37035332011.07.12 09:03vendere1.80eurusd1.39151.39351.38952011.07.12 09:101.38950.000.000.00360.00
37035062011.07.12 09:02vendere1.82eurusd1.39271.39301.39242011.07.12 09:021.39300.000.000.00-54.60
 
Non lo consiglio per davvero.
 
grell non ricevo stop loss
 
stop loss a candela bassa
 
o massimo a seconda di quale ordine
 
Provate a guardare nel codice EA, e capirete perché è diventato castrato. è semplice lì, perché l'ho scritto per un tester. Ma stranamente funziona.
 
Ad essere onesti, non capisco affatto la programmazione MQL.