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

 
lottamer:

è necessario inserire i termini AVERE un trade aperto (uno, senza major) in una riga, per esempio, con un crossover di medie.

ha trovato questo

==============================================

int start()

{

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

{

se ((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) )

PlaySound ("alert.wav");

ritorno(0);

}}

==============================================

C'è una posizione aperta ma nessun suono.

Puoi dirmi cosa c'è che non va?

O quanto sia facile scrivere la condizione:

SE MA 5 incrocia MA 10 e c'è una posizione aperta - chiudi quella posizione.

Questo sembra essere il punto in cui è necessario void....


Vedi se i suoni sono permessi per MT nel windup, e se ci sono file nella cartellaSound. Ma sul mercato bstrom lo sn funzionerà come una sveglia.
 
rigonich:

Vedi se i suoni sono permessi per MT nel windup, e se ci sono file nella cartellaSound. Ma sul mercato bstrom lo sn funzionerà come una sveglia.


No, beh, anche se sono un principiante, ma non faccio questi errori. :))

altri esperti cantano come usignoli nello stesso terminale!

 
Desead:

Dannazione, questo è il mio problema. Mi chiedo come posso aggirarlo se ho solo bisogno di cancellare l'intera griglia quando scarico il robot... Non riesco a pensare a niente qui :(

porre la stessa condizione prima di chiamare deinit sulla stessa condizione su cui si chiama deinit.
 
lottamer:


No, sono un principiante, ma non faccio questo tipo di errore. :))

gli altri esperti cantano come usignoli! nello stesso terminale!


E se si tratta di uno script - è necessario avere il permesso di commercio per Expert Advisors abilitato, e nella finestra, dove l'hai messo, non ci dovrebbero essere altri script di lavoro o Expert Advisors, inoltre "zing" se ci sono operazioni aperte su qualsiasi strumento.
 
rigonich:

Mettete un deinit prima di chiamare il deinit dalla stessa condizione in cui chiamate il deinit.


Quindi deinit viene chiamato quando rimuovo un robot da un grafico - non posso tracciare questa condizione in nessun altro modo..... è probabilmente più facile scrivere uno script separato che cancella tutti i restanti robot in sospeso, non c'è altro modo.

A proposito, un altro pensiero sulla questione:

Penso di aver risolto il problema della cancellazione degli ordini in sospeso. Determino la quantità di ordini "necessari" (da rimuovere) in una funzione separata, chiamo questa funzione e poi while con una condizione (Totale>0), poi il ciclo di rimozione for(int i=Totale-1;i<=0l; i--), di nuovo calcolando la quantità di "necessario", contatore di tentativi di rimozione con uscita dawhile quando il livello dato è raggiunto. In questo modo tutto viene cancellato.

qui può verificarsi un ciclo infinito nel caso in cui uno degli ordini scompaia dopo il momento del conteggio per qualsiasi motivo.

 
rigonich:

E se si tratta di uno script, devi avere i permessi di trading Expert Advisor abilitati.


questo è un EA.

tutti i permessi sono ovviamente abilitati (ci sono altri EAs - funzionano -NON allo stesso tempo)

c'è un problema nel codice. c'è qualcosa che non va.....

 
Desead:

Grazie per la risposta. Non ho bisogno di tutti, solo bylimit e selllimit, e li metto anche solo, il mago è anche presente ovunque lo stesso. Ho guardato il codice dato da te, c'è tanta roba lì, mi sono seduto per capirlo, in generale, se non posso risolvere il problema da solo, dovrò smontare i tuoi script più a fondo, non c'è altro modo, non si cancella e basta (

Stavo pensando a una cosa. Ho impostato la cancellazione di tutti i robot in sospeso in un solo posto - quando scarico il mio robot, sarà messo in deinit. Forse questa sezione ha qualche tipo di limitazione di tempo? Quando si cancellano solo pochi ordini, tutto va bene, ma quando scarico un'intera griglia, allora che diavolo succede - restano sempre una decina di ordini e non è possibile pulirla manualmente.

Il mio script usa questa libreria. La funzione responsabile della cancellazione degli ordini in esso contenuti:

/*int fClose_AllOrders (double& fd_Pribul,         // Возвращаемый профит закрытых ордеров
                        int fi_Type = -1,          // тип закрываемых ордеров: -1 - все; -2 - рыночные; 7 - отложенные или OrderType()
                        int fi_NBars_Life = 0,     // минимальная "жизнь" ордера в барах на fi_Period: 0 - параметр не учитывается
                        int fi_Period = 0,         // Период
                        int fi_OrderProfit = 0)*/  // Идентификатор профитности ордера: > 0 - профитный; < 0 - лоссовый
                                     // Функция закрытия "своих" ордеров по признаку

Hai bisogno di qualche conoscenza per strappare la funzione dalla libreria, ma usare l'intera libreria è abbastanza accettabile per un principiante.

 
rigonich:

Hurrah, sembra che io abbia risolto il problema della cancellazione degli ordini. Ho calcolato il numero di ordini "necessari" (da rimuovere) in una funzione separata, chiamata questa funzione, poi while con una condizione (Totale>0), poi il ciclo di rimozione for(int i=Totale-1 ;i<=0l; i--), di nuovo, la funzione di conteggio dei"necessari", contatore di tentativi di rimozione con l'uscita dawhile quando il livello specificato è raggiunto. In questo modo, tutto viene cancellato.
Quando si usano i loop, bisogna SEMPRE fare attenzione: mettere il conteggio delle iterazioni e la condizione di uscita quando l'EA non può fare trading.
 
TarasBY:
Dovresti stare SEMPRE attento quando usi i loop: metti un contatore di iterazione e una condizione di uscita quando proibisci all'EA di fare trading.


Grazie per il suggerimento. Avevo dimenticato la condizione di uscita quando non è permesso alcuno scambio.
 
Desead:

Dannazione, questo è il mio problema. Mi chiedo come posso bypassarlo se ho solo bisogno di cancellare l'intera griglia quando scarico il robot... Non riesco nemmeno a pensare a qualcosa da fare con questo :(

Uno script può essere caricato in deinit() tramite la libreria a grafico:

 // 7.9. Функция загружает на указанный график скрипт по его имени.
 void ServiceLoadScript(int    hwndChart,    // Системный дескриптор окна графика, куда загружается скрипт.
                        string szNameScript, // Имя загружаемого скрипта.
                        int    bOK);         // Подтверждение запуска скрипта, при наличии диалогового окна свойств скрипта. Скрипт может не иметь окна свойств!
                                             // При использовании функции для загрузки скрипта из скрипта на текущем графике параметр не работает из-за
                                             // невозможности одновременной работы двух скриптов на одном графике.
                                             // TRUE - автонажатие на кнопку "OK" разрешено, FALSE - автонажатие на кнопку "OK" запрещено.

con la funzione cancella tutti gli ordini.

P.S. Con alcuni o altri costi ed energia è possibile risolvere QUALSIASI desiderio esotico di un commerciante, ma se avete bisogno di questo "esotico" a volte ... :)))