[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 10
tol64: Potete consigliarmi se è possibile determinare programmaticamente la possibilità di impostare uno stop loss/stake profit immediatamente all'apertura della posizione/impostazione di un ordine pendente o dopo?
Controllate in anticipo i livelli di stop e di profitto.
Gli identificatori di richiesta usati nella funzione MarketInfo(). Può essere uno dei seguenti valori:
Costante .
Valore
Descrizione
MODO_BASSO
1
Prezzo minimo giornaliero
MODO_ALTO
2
Prezzo massimo giornaliero
MODO_TIME
5
Ora dell'ultima citazione
MODE_BID
9
Ultimo prezzo d'offerta ricevuto. Per lo strumento corrente è memorizzato nella variabile predefinita Bid
MODE_ASK
10
Ultimo prezzo Ask ricevuto. Memorizzato nella variabile predefinita Ask for the current symbol
MODO_POINT
11
Dimensione del punto nella valuta di quotazione. Memorizzato nella variabile predefinita Point per il simbolo corrente
MODE_DIGITS
12
Numero di cifre dopo il punto decimale nel prezzo dello strumento. Memorizzato nella variabile predefinita Digits per il simbolo corrente
MODE_SPREAD
13
Spread in pip
MODE_STOPLEVEL
14
Livello minimo ammissibile di Stop Loss/Stake Profit in pip
MODE_LOTSIZE
15
Dimensione del contratto nella valuta di base dello strumento
MODE_TICKVALUE
16
Dimensione minima del cambiamento del prezzo dello strumento nella valuta di deposito
MODE_TICKSIZE
17
Passo minimo della variazione del prezzo dello strumento nella valuta di quotazione
MODE_SWAPLONG
18
Dimensione dello swap per le posizioni lunghe
MODE_SWAPSHORT
19
Dimensione dello swap per le posizioni corte
MODE_STARTING
20
Data di inizio del calendario (di solito usata per i futures)
MODALITÀ_SCADENZA
21
Data di scadenza (normalmente usata per i futures)
MODO_COMMERCIALE PERMESSO
22
Permesso di negoziare lo strumento specificato
MODE_MINLOT
23
Dimensione minima del lotto
MODE_LOTSTEP
24
Passo di cambiamento della dimensione del lotto
MODE_MAXLOT
25
Dimensione massima del lotto
MODE_SWAPTYPE
26
Metodo di calcolo degli swap. 0 - in punti; 1 - in valuta base dello strumento; 2 - in percentuali; 3 - in valuta di margine.
MODE_PROFITCALCMODE
27
Modalità di calcolo del profitto. 0 - Forex; 1 - CFD; 2 - Futures
MODO_MARGALCMODE
28
Modalità di calcolo del margine. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD su indici
MODALITÀ_MARGININIT
29
Margine iniziale richiesto per 1 lotto
MODALITÀ_MARGINE-MANUTENZIONE
30
Importo del requisito di margine per sostenere le posizioni aperte per 1 lotto
MODO_MARGINE COPERTO
31
Margine addebitato su posizioni sovrapposte per 1 lotto
MODO_MARGINE RICHIESTO
32
Quantità di fondi liberi, necessari per aprire 1 lotto per l'acquisto
LIVELLO DI CONGELAMENTO
33
Livello di congelamento degli ordini in punti. Se il prezzo di esecuzione è entro i limiti definiti dal livello di congelamento, l'ordine non può essere modificato, cancellato o chiuso.
Sto appena imparando a scrivere un EA, come molti dei miei primi EA su indicatori standard, ne ho appena scritto uno nuovo, ma ora ho complicato il mio compito. In generale, come fare, che nell'emergere di condizioni aperto una posizione e quando si chiude, prendiamo le stesse condizioni quando si salva il nuovo non ha aperto, e aperto solo quando le condizioni opposte, ecc Grazie!!!
c'è un esempio già pronto nell'aiuto
int i,accTotal=OrdersHistoryTotal(); for(i=0;i<accTotal;i++) { //---- controllare il risultato della selezione if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error accessing historical database (",GetLastError(),"); break;
} Dobbiamo ricordare il tempo di chiusura dell'ordine, confrontare il tempo di chiusura dell'ordine con il tempo di chiusura nell'iterazione precedente, se (il tempo di chiusura è più alto e il tipo di operazione commerciale è Buy o Sell), allora dovremmo ricordare il tempo dell'ordine corrente e il tipo di operazione commerciale // come risultato, alla fine del ciclo sappiamo il tipo di ordine che ha chiuso per ultimo } Qualcosa come questo .
Precontrollare i livelli di stop e di impostazione dei profitti .
Non c'è nessun controllo in questa lista per alcuni tipi di conto. Ecco un paragrafo del regolamento delle operazioni di trading per i conti NDD:
3.3 Se una posizione viene aperta attraverso il terminale del cliente utilizzando un Expert Advisor, il cliente non può designare ordini di Stop Loss e/o Take Profit. Se il cliente desidera piazzare questi ordini, può farlo modificando una posizione esistente in conformità alle clausole 5.16 - 5.22 e 9.13 - 9.16.
Mi sto chiedendo se è possibile controllare questo programmaticamente. Da quanto ho capito, no. Inizialmente devi scrivere nel programma una funzione per aprire posizioni/impostare ordini pendenti, tenendo conto delle condizioni che sono state impostate dal broker.
Non c'è nessun controllo in questa lista per alcuni tipi di conto. Ecco un paragrafo del regolamento delle operazioni di trading per i conti NDD:
Mi interessa sapere se questo può essere controllato programmaticamente. Da quanto ho capito, no. Dovete originariamente scrivere in un programma una funzione per aprire posizioni / impostare ordini pendenti, tenendo conto delle condizioni che sono impostate dal broker.
Non capisco bene le regole per impostare gli ordini, prova a giocare con la demo e vedi cosa puoi e non puoi fare. Per quanto ho capito nulla ti impedisce di impostare programmaticamente un ordine e poi modificarlo. Giusto è strano, a meno che tu non tagli la connessione dopo aver aperto una posizione senza lasciare alcuno stop.
Non c'è nessun controllo in questa lista per alcuni tipi di conto. Ecco un paragrafo del regolamento delle operazioni di trading per i conti NDD:
Mi interessa sapere se questo può essere controllato programmaticamente. Da quanto ho capito, no. Inizialmente devi scrivere una funzione per aprire posizioni/impostare ordini pendenti nel programma, tenendo conto delle condizioni stabilite dal broker.
Non c'è nessun problema. Anche (se non per uso personale, perché si sa su quali conti (condizioni di trading e con chi) usarlo), ma se si invia l'EA per ordinare e il cliente non ha ancora deciso su quali conti e dove sarà utilizzato, anche su tipi di conto con la possibilità di impostare un take e stop immediato, allora di default produrre l'EA con valori zero di questi livelli quando si impostano tutti i tipi di ordini, poi con la loro modifica (funzionerà lì e lì), mentre, naturalmente, nessuno ha annullato i requisiti di controllo e le restrizioni a p.
Non capisco bene le regole per impostare gli ordini, provate a giocare con la demo, cosa potete e cosa no. Per quanto ho capito nulla ti impedisce di impostare programmaticamente un ordine e poi modificarlo. Giusto è strano, a meno che tu non tagli la connessione dopo aver aperto una posizione senza lasciare alcuno stop.
))) No. Lei mi fraintende completamente. Non ho scritto di "impostare programmaticamente", ho scritto di definire programmaticamente. Su alcuni tipi di conto non è possibile aprireimmediatamenteuna posizione e impostare stop/stop, il che sarebbe preferibile/sicuro per me. Su mql5, se non mi sbaglio, sembra essere possibile determinarlo. Vorrei essere in grado di determinare questo e, a seconda della definizione, scegliere quale funzione utilizzare.
Non c'è nessun problema. Anche (se non per uso personale, perché si sa su quali conti (condizioni di trading e con chi) usarlo), ma se si fa un EA per ordinare e il cliente non ha ancora deciso su quali conti e dove lo userà, anche su tipi di conto con la possibilità di impostare subito un take e stop, allora si fa comunque un EA con valori nulli di questi livelli di default quando si impostano tutti i tipi di ordini, poi con la loro modifica (funzionerà lì e lì), mentre, ovviamente, nessuno ha cancellato i requisiti di controllo e le restrizioni a p
Sì, non c'è problema quando c'è una soluzione. Devi solo usare quello che hai e usarlo correttamente).
Roman. e ivandurak grazie mille per le vostre risposte, ma questo è ancora difficile da capire per me. Ho trovato un suggerimento su un altro forum su come fare questo, ma finora non posso applicarlo al mio solito codice
int BuyTrue, SellTrue;// definire le variabili che serviranno come queste bandiere .... //--- Condizioni per l'acquisto if (BuyTrue==0 && ... più le vostre altre condizioni) //condizione di posizione aperta { .... OrderSend(....); //funzione per aprire un ordine BuyTrue=1; // Se BuyTrue=1, la condizione per l'apertura della posizione non sarà completamente soddisfatta // di conseguenza, ad un segnale di acquisto ripetuto non verrà aperta una negoziazione SellTrue=0; // A SellTrue=0 la condizione di apertura della posizione sarà completamente soddisfatta // quindi il prossimo trade sarà solo Sell .... }
//--- Condizione per la vendita if (SellTrue==0 && ... più le vostre altre condizioni) //condizione di posizione aperta { .... OrderSend(....); //funzione per aprire un ordine SellTrue=1; // Se SellTrue=1, la condizione di apertura dell'ordine non sarà completamente soddisfatta // quindi, ad un secondo segnale Sell non verrà aperta una posizione BuyTrue=0; // A BuyTrue=0 la condizione di apertura della posizione sarà completamente soddisfatta // di conseguenza, il prossimo trade sarà solo Buy .... }
Roman. e ivandurak grazie mille per le vostre risposte, ma questo è ancora difficile da capire per me. Ho trovato un suggerimento su un altro forum su come fare questo, ma finora non posso applicarlo al mio solito codice
int BuyTrue, SellTrue;// definire le variabili che serviranno come bandiere descritte sopra .... //--- Condizioni per l'acquisto if (BuyTrue==0 && ... più le vostre altre condizioni) //condizione di posizione aperta { .... OrderSend(....); //funzione per aprire un ordine BuyTrue=1; // Se BuyTrue=1, la condizione per l'apertura della posizione non sarà completamente soddisfatta // di conseguenza, ad un segnale di acquisto ripetuto non verrà aperta una negoziazione SellTrue=0; // A SellTrue=0 la condizione di apertura della posizione sarà completamente soddisfatta // quindi il prossimo trade sarà solo Sell .... }
//--- Condizione per la vendita if (SellTrue==0 && ... più le vostre altre condizioni) //condizione di posizione aperta { .... OrderSend(....); //funzione per aprire un ordine SellTrue=1; // Se SellTrue=1, la condizione di apertura dell'ordine non sarà completamente soddisfatta // quindi, ad un secondo segnale Sell non verrà aperta una posizione BuyTrue=0; // A BuyTrue=0 la condizione di apertura della posizione sarà completamente soddisfatta // di conseguenza, il prossimo trade sarà solo Buy .... }
Prima di tutto, incolla il tuo codice nell'editor tramite Ctrl+Alt+M (o premi SRC in cima al menu), altrimenti è male, cosa è chiaro - tutto si fonde sotto uno...:-))
In secondo luogo, leggete il tutorial, in particolare le informazioni sul link che ho consigliato, sotto il codice c'è la sua descrizione e proprio alla fine della descrizione è descritto con precisione - come segnalare una volta un prezzo sopra/sotto la MA (avrete un'analogia con una singola entrata ad una data condizione di trading - l'uso di bandiere e tutto), prima di LAVORARE il vostro Wizard ... :-)))
P.S. o ricerca su google: Come inserire correttamente il codice sito:mql4.com
Potete consigliarmi se è possibile determinare programmaticamente la possibilità di impostare uno stop loss/stake profit immediatamente all'apertura della posizione/impostazione di un ordine pendente o dopo?
Controllate in anticipo i livelli di stop e di profitto.
Gli identificatori di richiesta usati nella funzione MarketInfo(). Può essere uno dei seguenti valori:
Sto appena imparando a scrivere un EA, come molti dei miei primi EA su indicatori standard, ne ho appena scritto uno nuovo, ma ora ho complicato il mio compito. In generale, come fare, che nell'emergere di condizioni aperto una posizione e quando si chiude, prendiamo le stesse condizioni quando si salva il nuovo non ha aperto, e aperto solo quando le condizioni opposte, ecc Grazie!!!
c'è un esempio già pronto nell'aiuto
int i,accTotal=OrdersHistoryTotal(); for(i=0;i<accTotal;i++) { //---- controllare il risultato della selezione if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error accessing historical database (",GetLastError(),"); break; } Dobbiamo ricordare il tempo di chiusura dell'ordine, confrontare il tempo di chiusura dell'ordine con il tempo di chiusura nell'iterazione precedente, se (il tempo di chiusura è più alto e il tipo di operazione commerciale è Buy o Sell), allora dovremmo ricordare il tempo dell'ordine corrente e il tipo di operazione commerciale // come risultato, alla fine del ciclo sappiamo il tipo di ordine che ha chiuso per ultimo } Qualcosa come questo .Precontrollare i livelli di stop e di impostazione dei profitti .
Non c'è nessun controllo in questa lista per alcuni tipi di conto. Ecco un paragrafo del regolamento delle operazioni di trading per i conti NDD:
3.3 Se una posizione viene aperta attraverso il terminale del cliente utilizzando un Expert Advisor, il cliente non può designare ordini di Stop Loss e/o Take Profit. Se il cliente desidera piazzare questi ordini, può farlo modificando una posizione esistente in conformità alle clausole 5.16 - 5.22 e 9.13 - 9.16.
Mi interessa sapere se questo può essere controllato programmaticamente. Da quanto ho capito, no. Dovete originariamente scrivere in un programma una funzione per aprire posizioni / impostare ordini pendenti, tenendo conto delle condizioni che sono impostate dal broker.Non c'è nessun controllo in questa lista per alcuni tipi di conto. Ecco un paragrafo del regolamento delle operazioni di trading per i conti NDD:
Non capisco bene le regole per impostare gli ordini, prova a giocare con la demo e vedi cosa puoi e non puoi fare. Per quanto ho capito nulla ti impedisce di impostare programmaticamente un ordine e poi modificarlo. Giusto è strano, a meno che tu non tagli la connessione dopo aver aperto una posizione senza lasciare alcuno stop.
Mi interessa sapere se questo può essere controllato programmaticamente. Da quanto ho capito, no. Inizialmente devi scrivere una funzione per aprire posizioni/impostare ordini pendenti nel programma, tenendo conto delle condizioni stabilite dal broker.Non c'è nessun controllo in questa lista per alcuni tipi di conto. Ecco un paragrafo del regolamento delle operazioni di trading per i conti NDD:
Non c'è nessun problema. Anche (se non per uso personale, perché si sa su quali conti (condizioni di trading e con chi) usarlo), ma se si invia l'EA per ordinare e il cliente non ha ancora deciso su quali conti e dove sarà utilizzato, anche su tipi di conto con la possibilità di impostare un take e stop immediato, allora di default produrre l'EA con valori zero di questi livelli quando si impostano tutti i tipi di ordini, poi con la loro modifica (funzionerà lì e lì), mentre, naturalmente, nessuno ha annullato i requisiti di controllo e le restrizioni a p.
Non capisco bene le regole per impostare gli ordini, provate a giocare con la demo, cosa potete e cosa no. Per quanto ho capito nulla ti impedisce di impostare programmaticamente un ordine e poi modificarlo. Giusto è strano, a meno che tu non tagli la connessione dopo aver aperto una posizione senza lasciare alcuno stop.
))) No. Lei mi fraintende completamente. Non ho scritto di "impostare programmaticamente", ho scritto di definire programmaticamente. Su alcuni tipi di conto non è possibile aprire immediatamente una posizione e impostare stop/stop, il che sarebbe preferibile/sicuro per me. Su mql5, se non mi sbaglio, sembra essere possibile determinarlo. Vorrei essere in grado di determinare questo e, a seconda della definizione, scegliere quale funzione utilizzare.
Non c'è nessun problema. Anche (se non per uso personale, perché si sa su quali conti (condizioni di trading e con chi) usarlo), ma se si fa un EA per ordinare e il cliente non ha ancora deciso su quali conti e dove lo userà, anche su tipi di conto con la possibilità di impostare subito un take e stop, allora si fa comunque un EA con valori nulli di questi livelli di default quando si impostano tutti i tipi di ordini, poi con la loro modifica (funzionerà lì e lì), mentre, ovviamente, nessuno ha cancellato i requisiti di controllo e le restrizioni a p
Sì, non c'è problema quando c'è una soluzione. Devi solo usare quello che hai e usarlo correttamente).
Roman. e ivandurak grazie mille per le vostre risposte, ma questo è ancora difficile da capire per me. Ho trovato un suggerimento su un altro forum su come fare questo, ma finora non posso applicarlo al mio solito codice
int BuyTrue, SellTrue;// definire le variabili che serviranno come queste bandiere
....
//--- Condizioni per l'acquisto
if (BuyTrue==0 && ... più le vostre altre condizioni) //condizione di posizione aperta
{
....
OrderSend(....); //funzione per aprire un ordine
BuyTrue=1; // Se BuyTrue=1, la condizione per l'apertura della posizione non sarà completamente soddisfatta
// di conseguenza, ad un segnale di acquisto ripetuto non verrà aperta una negoziazione
SellTrue=0; // A SellTrue=0 la condizione di apertura della posizione sarà completamente soddisfatta
// quindi il prossimo trade sarà solo Sell
....
}
//--- Condizione per la vendita
if (SellTrue==0 && ... più le vostre altre condizioni) //condizione di posizione aperta
{
....
OrderSend(....); //funzione per aprire un ordine
SellTrue=1; // Se SellTrue=1, la condizione di apertura dell'ordine non sarà completamente soddisfatta
// quindi, ad un secondo segnale Sell non verrà aperta una posizione
BuyTrue=0; // A BuyTrue=0 la condizione di apertura della posizione sarà completamente soddisfatta
// di conseguenza, il prossimo trade sarà solo Buy
....
}
Il mio codice per aprire una posizione
total=OrdersTotal();
se(totale<1)
{
// nessun ordine aperto identificato
se(AccountFreeMargin()<(1000*Lots))
{
Print("Non abbiamo soldi. Free Margin = ", AccountFreeMargin();
ritorno(0);
}
// controlla la posizione lunga (BUY)
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green);
se(biglietto>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordine BUY aperto: ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
ritorno(0);
}
// controllare la posizione corta (SELL)
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red);
se(biglietto>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Stampa("Ordine SELL aperto: ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError());
ritorno(0);
}
ritorno(0);
}
Roman. e ivandurak grazie mille per le vostre risposte, ma questo è ancora difficile da capire per me. Ho trovato un suggerimento su un altro forum su come fare questo, ma finora non posso applicarlo al mio solito codice
int BuyTrue, SellTrue;// definire le variabili che serviranno come bandiere descritte sopra
....
//--- Condizioni per l'acquisto
if (BuyTrue==0 && ... più le vostre altre condizioni) //condizione di posizione aperta
{
....
OrderSend(....); //funzione per aprire un ordine
BuyTrue=1; // Se BuyTrue=1, la condizione per l'apertura della posizione non sarà completamente soddisfatta
// di conseguenza, ad un segnale di acquisto ripetuto non verrà aperta una negoziazione
SellTrue=0; // A SellTrue=0 la condizione di apertura della posizione sarà completamente soddisfatta
// quindi il prossimo trade sarà solo Sell
....
}
//--- Condizione per la vendita
if (SellTrue==0 && ... più le vostre altre condizioni) //condizione di posizione aperta
{
....
OrderSend(....); //funzione per aprire un ordine
SellTrue=1; // Se SellTrue=1, la condizione di apertura dell'ordine non sarà completamente soddisfatta
// quindi, ad un secondo segnale Sell non verrà aperta una posizione
BuyTrue=0; // A BuyTrue=0 la condizione di apertura della posizione sarà completamente soddisfatta
// di conseguenza, il prossimo trade sarà solo Buy
....
}
Il mio codice per aprire un affare.
total=OrdersTotal();
se(totale<1)
{
// nessun ordine aperto identificato
se(AccountFreeMargin()<(1000*Lots))
{
Print("Non abbiamo soldi. Free Margin = ", AccountFreeMargin();
ritorno(0);
}
// controlla la posizione lunga (BUY)
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green);
se(biglietto>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordine BUY aperto: ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
ritorno(0);
}
// controllare la posizione corta (SELL)
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red);
se(biglietto>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Stampa("Ordine SELL aperto: ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError());
ritorno(0);
}
ritorno(0);
}
Prima di tutto, incolla il tuo codice nell'editor tramite Ctrl+Alt+M (o premi SRC in cima al menu), altrimenti è male, cosa è chiaro - tutto si fonde sotto uno...:-))
In secondo luogo, leggete il tutorial, in particolare le informazioni sul link che ho consigliato, sotto il codice c'è la sua descrizione e proprio alla fine della descrizione è descritto con precisione - come segnalare una volta un prezzo sopra/sotto la MA (avrete un'analogia con una singola entrata ad una data condizione di trading - l'uso di bandiere e tutto), prima di LAVORARE il vostro Wizard ... :-)))
P.S. o ricerca su google: Come inserire correttamente il codice sito:mql4.com