Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 513

 

Lo sto facendo bene?

y = OrderOpenPrice()-Ask;

Sottraggo il prezzo attuale dal prezzo dell'ultimo ordine aperto?

int i_buy=0; int i_sell=0;

for(int i=0;i<OrdersTotal();i++){

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol()){

switch(OrderType()){// Есть ли открыте ордера

case OP_BUY:

i_buy++;

break;

case OP_SELL:

i_sell++;

break;

}

y = OrderOpenPrice()-Ask;

}

}


if((i_buy==0 && i_sell==0) || y > Step) //--- нет открытых ордеров, открываем или расстояние от последнего ордера до текущей цены. Больше step

OrderSend(Symbol(), OP_BUY,StartLot,Ask,Slippage,0,Ask+TakeProfit*Point(),WindowExpertName()+" "+(string)0,0,0,clrBlue);


 
woin2110:

https://docs.mql4.com/ru/trading/orderselecthttps://docs.mql4.com/ru/trading/orderopenprice https://docs.mql4.com/ru/trading/orderlots

double z; //dichiarare la variabile "z"
double y; //dichiarare la variabile "y"


if(OrderSelect(10,SELECT_BY_POS)==true) //se l'ordine selezionato (per biglietto) è presente

{

OrderLots()=z //assegnare il lotto di questo ordine alla variabile "z

OrderOpenPrice()=y //assegnare il prezzo aperto alla variabile "y

}

prova questo

Basta non confondere le persone e dire stronzate, per favore. Tu dici per biglietto, ma scrivi selezione per indice. E se si seleziona per biglietto, non è necessario specificare pool - la funzione lo ignora e lo seleziona in una delle due liste - in quella in cui si trova. E per controllare da quale lista l'ordine è selezionato, dovremmo controllare il tempo di chiusura dell'ordine dopo una selezione riuscita e se è superiore a zero - allora l'ordine è già stato chiuso, altrimenti - è selezionato dalla lista delle posizioni aperte

Non state assegnando il valore del lotto a una variabile, e viceversa - state cercando di assegnare il valore della variabile alla funzione che restituisce il lotto dell'ordine selezionato - questo non ha assolutamente senso

Esattamente la stessa cosa che stai cercando di fare con la funzione che restituisce il prezzo di apertura.

 

artmedia70:

Dimmi cosa sto sbagliando. Tutto sembra essere corretto.

if((i_buy==0 && i_sell==0) || y > Step)

Oppure (i_buy==0 && i_sell==0) o y > Step. Se uno dei due è vero. Allora lo saltiamo e apriamo un ordine.

 
evillive:

Se Alpari - non hai mai potuto. Se un'altra società di intermediazione, dipende dal conto. Se abbiamo un buon rapporto di lavoro con Alpari, avremo una migliore comprensione del mercato. I termini di scambio dovrebbero essere studiati prima di iniziare a fare qualcosa, è tutto scritto lì.

L'helpdesk 8-800-200-01-31 ha spiegato che alla fine della settimana scorsa hanno risolto un bug che permetteva di aprire ordini nei conti ECN nello stesso momento in cui venivano impostati SL e TP. Ho chiuso l'ultima posizione giovedì.

Hai ragione nel dire che il Regolamento del Trading non dice nulla su questo e che solo OrderModify() salverà ora.

Grazie per la risposta.

 
Zolotai:

artmedia70:

Dimmi cosa sto sbagliando. Tutto sembra essere corretto.

if((i_buy==0 && i_sell==0) || y > Step)

Oppure (i_buy==0 && i_sell==0) o y > Step. Se uno dei due è vero. Allora lo saltiamo e apriamo un ordine.

Praticamente non capisco la domanda...

Non so cosa ci manca, ma un ordine può essere aperto... Cioè, se questa condizione è soddisfatta e un ordine deve essere aperto, allora

Posso dirvi cosa c'è scritto qui:

Se i_buy e i_sell sono entrambi uguali a zero, un ordine può essere aperto. Oppure, se uno di essi non è uguale a zero, o forse anche entrambi non sono uguali, ma se y è maggiore di Step, allora aprite anche un ordine.

 
artmedia70:

Praticamente non capisco la domanda...

Non so cosa ci manca, ma un ordine può essere aperto... Cioè, se questa condizione è rispettata e un ordine deve essere aperto.

Posso dirvi cosa c'è scritto qui:

"Aprire un ordine se i_buy e i_sell sono entrambi uguali a zero. O se uno di essi non è uguale a zero, o forse anche entrambi non sono uguali, ma se y è maggiore di Step, allora anche un ordine dovrebbe essere aperto.



Ho capito bene nel ciclo. Procediamo dal primo ordine aperto all'ultimo. Di conseguenza, dovremmo prendere il prezzo dell'ultimo ordine.

C'è di più. Ho messo Alert("d") in OnTick. Ho eseguito il codice nel tester ma non ho sentito nessun bip o finestra.

 
Zolotai:

Nel ciclo della forcella ho capito bene. Andiamo dal primo ordine aperto all'ultimo. Corrispondentemente, prendo il prezzo dell'ultimo ordine.

Ho anche questo. Ho messo Alert("d") in OnTick. Ho eseguito il codice nel tester ma non ho sentito nessun bip o finestra.

Gli avvisi nel tester vengono visualizzati nel registro del tester. Ma sul ciclo, il salto, la selezione, la forza bruta non è chiaro. Riesci a capire cosa vuoi ottenere alla fine?
 

Buon pomeriggio!

Come combattere con "MetaEditor non trovato" quando si cerca di modificare un EA? MetaTrader build 600.

Non mi sembra di ricordare un tale problema nelle vecchie build...

Può essere spiegato dal fatto che il computer su cui sto lavorando è piuttosto poco potente e caricato per il 50-75% del tempo. Ho 7 istanze MT4 in esecuzione su di esso, ma in condizioni normali (cioè senza carico esterno come l'accesso tramite TeamViewer e cercando di lanciare MetaEditor) le sue prestazioni sono sufficienti, e Task Manager in esecuzione in background mostra un utilizzo medio della CPU <=45-50% per 15-20 minuti.

Questo problema non si verifica nel 100% dei casi e MetaEditor, dopo aver mostrato una pazienza e una persistenza non comuni, funzionerà ogni volta dalla 5°-10°-25° volta. Ma è davvero fastidioso cercare di avviare MetaEditor per mezz'ora.

 
artmedia70:
Gli avvisi nel tester vengono stampati nel registro del tester. E ciò che riguarda il loop, il salto, la selezione e il brute-forcing non sono chiari. Puoi ottenere il succo di ciò che vuoi come risultato?


Voglio solo scrivere il robot più semplice. Funziona da martin, da solo.

È qui che si trova l'errore.

y = OrderOpenPrice()-Ask;

Non ottengo numeri interi come pensavo. Ma per esempio 0,0044. Come posso ottenere 44, un numero intero?

 
Zolotai:


Voglio solo scrivere il robot più semplice. Funziona da martin, da solo.

È qui che si trova l'errore.

y = OrderOpenPrice()-Ask;

Non ottengo numeri interi come pensavo. Ma per esempio 0,0044. Come posso ottenere 44, un numero intero?



int y = int((OrderOpenPrice()-Ask)/Point);
Motivazione: