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

 
Desead:
Aiutatemi se decidessi di scrivere un robot in C/C++, per esempio. Non è un problema scriverne uno, ma come lo collego con metatrader? Come ottenere quotazioni e come inviare un segnale di acquisto/vendita?

DLL - vedi esempi. È possibile che un programmatore, che sa scrivere in C/C++, non sia in grado di affrontare gli esempi standard della consegna МТ e questo nonostante la presenza di molto materiale sul forum?
 
VladislavVG:

DLL - vedi esempi. È possibile che un programmatore che sa scrivere in C/C++ non sia in grado di capire gli esempi standard della consegna di МТТ e questo nonostante il fatto che ci sia molto materiale sul forum?

Non sono un programmatore, ma a volte scrivo da solo le cose più semplici. Non ho bisogno di scrivere un robot complesso in nessun linguaggio e non è affatto un problema. Voglio scrivere un robot con la sua propria interfaccia e non eseguire parte delle funzioni come una dll e chiamarle da μl. Grazie a tutti i tipi di linguaggi visivi dove questo può essere fatto senza molto stress
 
lottamer:


Sì, ora capisco perché c'è un confronto per il tempo nel ciclo, e il tempo in general....

Capisco anche la LOGICA - segnare "A", poi escludere "A", ma prima, tutte le opzioni DOVE questa "A" può essere appuntata le ho provate - e ancora il consigliere mi restituisce l'ultimo biglietto, non il penultimo.

.

Ho inserito 2 cicli (2 funzioni) - il primo originale, il secondo con l'eccezione di "A"... eseguite una dopo l'altra.

Stampa zero....


Questa funzione usa variabili locali, quindi non dovrebbe essere eseguita sì volte come una funzione separata, fare due cicli uno dopo l'altro in una funzione, o dichiarare A come variabile globale. Io vado a prendere le sigarette e tu provi, e se non funziona, bussami quando torno e troveremo una soluzione.
 
Desead:

Non sono un programmatore, ma a volte scrivo io stesso le cose più semplici. Vorrei scrivere un semplice robot in qualsiasi lingua e non è affatto un problema. Volevo scrivere un intero robot con una propria interfaccia senza chiamare Metatrader, non parte delle sue funzioni in una dll e chiamarle da μl. Ho inventato un sacco di linguaggi visivi diversi, dove questo può essere fatto senza molto sforzo.

Se non volete usare affatto le caratteristiche del terminale (più di un centinaio di diverse funzioni incorporate, indicatori incorporati, la stessa interfaccia del programma), allora non si tratta di un semplice Expert Advisor, ma del vostro terminale, del vostro sviluppo.
 
rigonich:

Questa funzione usa variabili locali, quindi non eseguitela sì volte come una funzione separata, fate due cicli uno dopo l'altro in una funzione, o dichiarate A come variabile globale. Corro a prendere le sigarette, e voi provate mentre, se non riuscite, bussate quando torno, troveremo una soluzione.


IS!!!! c'è stato un piccolo errore... non era Ticket ma LastClosetPoz() e Sec_LastClosetPoz() che avrebbero dovuto essere stampati.

Sono sicuro che la mia versione non è la più elegante... ma funziona... Come si fa a mettere due cicli in una funzione... Non lo so... ho provato... ho avuto degli errori... al diavolo! (se non è troppo disturbo - mostratemelo - mi sarà utile, altrimenti - beh, non importa...) Grazie comunque.

Tuttavia, ho la sensazione che se devo capire il biglietto della 35esima transazione chiusa...sarò nei guai con il mio approccio :)))) hahahah

bontà sua che non è ancora all'orizzonte...3 al massimo...

 
rigonich:

Questa funzione usa variabili locali, quindi non eseguitela sì volte come una funzione separata, fate due cicli uno dopo l'altro in una funzione, o dichiarate A come variabile globale. Vado a prendere delle sigarette e tu puoi provare, e se non funziona, bussami quando torno e troveremo una soluzione.


ha funzionato finché non ho inserito il seguente

se (OrderSelect( (LastClosetPoz (),SELECT_BY_TICKET)==true)) Print("Stop loss", OrderStopLoss();

giura

')' - conteggio parametri errato G:\Program_Files_2\MT4-demo\experts\000.mq4 (57, 60)

Non capisco cosa vuole?

--------------------------------------------------------------------------------------------

L'HO CAPITO

==vero....

il che è strano, perché gli esempi nel tutorial dicono sempre così...

e ha anche arrotondato il valore di stop... alla quarta cifra...

 
lottamer:


IS!!!! c'è stato un piccolo errore... la stampa avrebbe dovuto essere LastClosetPoz() e Sec_LastClosetPoz() invece di Ticket.

Sono sicuro che la mia versione non è la più elegante... Ma funziona... Come inserire due cicli in una funzione... Non lo so... ho provato... ho avuto degli errori... al diavolo! (se non è troppo disturbo - mostratemelo - mi sarà utile, altrimenti - beh, non importa...) Grazie comunque.

Tuttavia, ho la sensazione che se devo capire il biglietto della 35esima transazione chiusa...sarò nei guai con il mio approccio :)))) hahahah

bontà sua che non è ancora all'orizzonte...3 al massimo...



int Ticket1,Ticket2;
//+------------------------------------------------------------------+
int fLastClosetPoz()
{
int Tot=OrdersHistoryTotal(),A,i;Ticket1=-1;Ticket2=-1;datetime time=0;
se(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
se(OrderSymbol()==Symbol())
{
se(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket1=OrderTicket();
}
}
}
altrimenti continuare;
}
}
Tot=OrdersHistoryTotal();A=Ticket1;time=0;
se(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
se(OrderTicket()==A)continua;
se(OrderSymbol()==Symbol())
{
se(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket2=OrderTicket();
}
}
}
altrimenti continuare;
}
}
ritorno(0);
}
//+------------------------------------------------------------------+
P.S. Edevi usare un ciclo annidato (cioè un ciclo dentro un ciclo) per determinareil 35° trade chiuso.
 
rigonich:


int Ticket1,Ticket2;
//+------------------------------------------------------------------+
int fLastClosetPoz()
{
int Tot=OrdersHistoryTotal(),A,i;Ticket1=-1;Ticket2=-1;datetime time=0;
se(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
se(OrderSymbol()==Symbol())
{
se(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket1=OrderTicket();
}
}
}
altrimenti continuare;
}
}
Tot=OrdersHistoryTotal();A=Ticket1;time=0;
se(Tot>0)
{
for(i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
se(OrderTicket()==A)continua;
se(OrderSymbol()==Symbol())
{
se(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket2=OrderTicket();
}
}
}
altrimenti continuare;
}
}
ritorno(0);
}
//+------------------------------------------------------------------+


stampa degli zeri... non funziona... non voglio scavare di più, perché è ovvio che i cicli sono solo sostituiti uno con l'altro - il volume non è chiaramente ridotto..... e abbiamo già una versione funzionante. Posso confrontare gli ordini nella prima variante... e qui non posso nemmeno vedere dov'è il secondo... e il primo è zero...

dopo qualche piccolo ritocco... che chiaramente sviluppa il cervello, anche questo codice ha funzionato! :))) grazie

 
lottamer:


ha funzionato finché non ho inserito il seguente

se ( Stampa("Stop loss", OrderStopLoss());) Print("Stop loss", OrderStopLoss();

giura

')' - conteggio parametri errato G:\Program_Files_2\MT4-demo\experts\000.mq4 (57, 60)

Non capisco cosa vuole?


Ancora 45, in questa forma OrderSelect(LastClosetPoz (),SELECT_BY_TICKET ) seleziona tra gli ordini pendenti e aperti per default e questo ordine non c'è. MettiOrderSelect(LastClosetPoz (),SELECT_BY_TICKET, MODE_HISTORY).
 
lottamer:


stampa degli zeri... non funziona... Non scavo oltre, perché è ovvio che i cicli vengono semplicemente sostituiti uno con l'altro - il volume non è chiaramente diminuito..... e abbiamo già una variante funzionante. Inoltre, nella prima variante - posso confrontare gli ordini ... e qui non posso nemmeno vedere dove è il secondo ... e il primo è zero ...

dopo qualche piccolo ritocco... che chiaramente sviluppa il cervello, anche questo codice ha funzionato! :))) grazie


Basta stampare le variabili Ticket1 e Ticket2 dopo la chiamata della funzione.