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

 

http://www.soft-sib.ru/articles/programs/10/

Un altro vantaggio dell'uso del DBMS e dell'architettura client-server rispetto all'approccio file-server è la possibilità di utilizzare un meccanismo di manipolazione dei dati transazionale. Questo servizio, fornito dal server dei dati, permette di combinare diverse azioni di modifica dei dati in un'unica operazione indivisibile (transazione). L'uso delle transazioni assicura una protezione affidabile delle informazioni dai guasti hardware e software sia sul lato client che su quello server dell'IS.

 
Sì, o sono invisibile o nessuno vuole o può aiutare((
 
PerlOF:


Il manuale e il tutorial sottolineano la necessità di connettersi a un server (per l'EA, gli script, gli indicatori).

È possibile chiamare funzioni speciali senza connettersi al server (in linea di principio)?


Sì, è così. Il server, infatti, è necessario per ricevere un tick che lancia la funzione start().

start() - funzione principale. Viene chiamato da esperti dopo la ricezione del prossimo tick. Per gli indicatori personalizzati è chiamato durante il ricalcolo dopo aver attaccato l'indicatore al grafico, all'apertura del terminale del cliente (se l'indicatore è attaccato al grafico), così come dopo l'arrivo del prossimo tick. Negli script viene eseguito immediatamente dopo il collegamento al grafico e l'inizializzazione. Senon c'è unafunzione start() nel modulo, questo modulo (Expert Advisor, script o indicatore personalizzato) non può essere lanciato.

Lo script può essere eseguito in un ciclo infinito, e quindi non ha bisogno di tick, i tick sono necessari per gli indicatori e gli Expert Advisors (nella configurazione standard (perché gli Expert Advisors possono anche funzionare in un ciclo infinito)).

Ma le zecche possono essere causate artificialmente - con VINAPI. Inoltre, c'è una caratteristica standard come il tester di strategia (che è anche in grado di generare tick).

Devi solo usare il tuo cervello e cercare sul sito (FORUM).

E non portare i vantaggi o gli svantaggi della tecnologia dei file-server.

 
MXDEEM:

Ciao, ho questo codice, controllo la presenza di ordini, se ho un ordine aperto, poi controllo di nuovo e così via, fino a quando l'ordine raggiunge 0. Ma l'esperto chiaramente ignora questo codice e apre un numero infinito di ordini, si prega di consigliare qual è l'errore?

int FunzioneSuccessiva()
{
int b=OrdiniTotali();
se (b>0)
{FunctionBUYnext();}
else {FunctionSELL();}
}



Navigatore del forum della comunità MQL4
RegoleCercaCome pubblicareAmministrazione del forumSegnala un abusoClub dei telepati
Domande da non fare
Come fare le domande giuste
Letteratura utileSoftware utileAlla ricerca di un indicatore (Expert Advisor o script)
 

C'è la necessità di disegnare una linea in un Trading Expert Advisor utilizzando la funzione iCustom.
Ho usato ZigZag come test:

for(int cnt=0; cnt<10000; cnt++) {
   double zigzag1=iCustom(NULL,0,"ZigZag",15,0,3,  0,cnt+1);
   if( zigzag1!=0 ) 
      break;
}


Poiché lo scopo di iCustom nel mio caso è solo quello di disegnare una linea
(i dati dell'indicatore non vengono utilizzati nell'Expert Advisor ), ho deciso di mettere il codice in deinit(). Ma lì non funziona e non disegna nulla.
In start(), tutto è OK.
1. Perché non funziona in deinit()?
2. Dovete evitare di eseguire il codice di cui sopra senza senso quando testate e ottimizzate
(evitate di sprecare il tempo della CPU) e fatelo eseguire solo sull'ultima barra della storia da testare.
- Come si può raggiungere questo obiettivo?
Grazie!
 
Roll:

il codice è assurdo.

PERCHE'? TUTTO COME INSEGNATO
 
MXDEEM:

PERCHE'? TUTTI PERCHE'?

Ti è stato insegnato in un modo strano...

Dove sono le funzioni chiamate dal corpo del vostro "codice"?

Anche il "codice" stesso è piuttosto divertente...

int FunctionBUYnext()
{
int b=OrdersTotal();
if (b>0)
{FunctionBUYnext();}
else {FunctionSELL();}
} 

Usando una chiamata a se stesso... Perché non uscire semplicemente da FunctionBUYnext() quando non ci sono ordini?

Inoltre - nessun controllo del tipo di ordine, nessun controllo del simbolo e del magik...

Io manderei la tua "maestra" allo scaffale...

 

Di fronte a un problema...

Lo script funziona con la funzione MessageBox() in questa forma

//+------------------------------------------------------------------+

#include <WinUser32.mqh>
#import "user32.dll"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int result = MessageBox("Are you ok?", "Caption",MB_YESNO|MB_ICONQUESTION);
   if(result != IDYES) Alert("Кнопка да не нажата");
//----
   return(0);
  }
//+------------------------------------------------------------------+

Ma fallisce completamente quando si usa la funzione non documentata MessageBoxTimeoutA():

//+------------------------------------------------------------------+

#include <WinUser32.mqh>
#import "user32.dll"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int result = MessageBoxTimeoutA(0, "Are you ok?", "Caption",MB_YESNO|MB_ICONQUESTION, 0, 10000);
   if(result != IDYES) Alert("Кнопка да не нажата");
//----
   return(0);
  }
//+------------------------------------------------------------------+

Anche una finestra di messaggio con pulsanti Sì/No non appare.

Chi l'ha incontrato - mi dica dove è sepolto il cane?

 
artmedia70:

È strano come ti hanno insegnato...

Dove sono le funzioni chiamate dal corpo del vostro "codice"?

Anche il "codice" stesso è piuttosto divertente...

Usando una chiamata a se stesso... Perché non uscire semplicemente da FunctionBUYnext() quando non ci sono ordini?

Inoltre - nessun controllo del tipo di ordine, nessun controllo del simbolo e del magik...

Io manderei la tua "maestra" allo scaffale...

SPIEGO IL SIGNIFICATO, SI CHIAMA PERCHÉ È NECESSARIO UN CONTROLLO IN QUESTA PARTE, SE SI EFFETTUA UN PRELIEVO TORNERÀ DI NUOVO ALL'INIZIO DELL'ESECUZIONE, NON NE HO BISOGNO, IL SIMBOLO E IL MAGO NON SONO CONSIDERATI, IL MIO INSEGNANTE INTERNET)))) SE NON È DIFFICILE PER FAVORE MANDAMI QUALCOSA DI SIMILE MA FUNZIONANTE, L'IDEA PRINCIPALE - NON FAR SAPERE SE C'È UN ORDINE, SE NON LO È ALLORA SALTA A UNA FUNZIONE SPECIFICA.

 
MXDEEM:

SPIEGO IL SIGNIFICATO, SI CHIAMA PERCHÉ ABBIAMO BISOGNO DI UN CONTROLLO IN QUESTA PARTE, SE SI ESCE TORNERÀ DI NUOVO ALL'INIZIO DELL'ESECUZIONE, NON NE HO BISOGNO, IL SIMBOLO E IL MAGO NON SONO PRESI IN CONSIDERAZIONE, IL MIO INSEGNANTE INTERNET))) SE NON TI DISPIACE L'INVIO DI QUALCOSA DI SIMILE MA FUNZIONANTE, L'IDEA PRINCIPALE - NON LASCIARE CHE SE L'ORDINE, SE NON, POI SALTARE A UNA FUNZIONE SPECIFICA.

Oh, non gridare così ... Credo che tu abbia il CapsLock bloccato... La dimensione del carattere dovrebbe essere raddoppiata, e sarebbe in grassetto...

E' solo un... un inciso.

Ora lasciate che ve lo spieghi:

Spiegherò il punto. Facendo una chiamata ricorsiva, stai facendo in modo che la tua EA vada in loop esattamente a questa parte... Cioè, se ci sono ordini o posizioni di mercato, l'EA dovrebbe bloccarsi e non fare nulla (solo bloccarsi) fino a quando non si cancellano manualmente tutti gli ordini e si chiudono le posizioni? Allora qual è il punto di questo trading automatizzato, se l'EA resterà appeso lì senza il tuo intervento?

Riconsidera il tuo approccio alla logica EA