Come codificare? - pagina 319

 
Tomcat98:
Ciao codificatori,

Come codificare alcune linee extra in modo che un Esperto si fermi dopo un trade vincente?

I pip sono nella borsa, poi si ferma l'Esperto...

Grazie mille

Tomcat98

Vedi sotto se hai qualche esperienza di codifica. Altrimenti, rivolgiti a un codificatore.

1) dopo ogni chiusura di trade, fate un ciclo in OrdersHistoryTotal() per controllare i trade.

2) controllare la chiusura dell'ultima operazione (OrderCloseTime()).

3) se l'ultima operazione, controllare OrderProfit() == profitto.

Se in profitto == true, impostare EndDayTrade == true && LastTradeDay == DayofYear().

Se in profitto == falso, impostare EndDayTrade == falso.

4) Quando il programma passa attraverso start(), dovrete inserire ==> if EndDayTrade == false prima di iniziare qualsiasi nuovo trade. Dato che è vero, allora non farà partire nuovi trade.

5) avrete bisogno di una funzione timer per controllare il nuovo giorno. (supponendo che il nuovo giorno sia quello che volete far scattare le nuove compravendite)

La forma più semplice sarebbe if (LastDay != DayofYear() ).

6) all'interno della funzione timer di cui sopra, impostare LastDay = DayofYear().

if ( LastTradeDay != DayofYear() && EndDayTrade == true)

impostare EndDayTrade == false, che ricomincia tutto da capo.

variabili definite dall'utente

bool EndDayTrade = false;

int LastTradeDay = 9999999;

int LastDay = 999999;

Spero che questa spiegazione sia abbastanza chiara.

 
dasio:
Ciao,

Sto cercando di unire questi due codici ma ho dei problemi.

Ho bisogno che quando un ordine pendente è riempito l'altro deve essere cancellato.

Grazie per la vostra disponibilità

int opened =0;

int pending =0;

for(int i=OrdersTotal()-1; i>=0; i--)

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

if(OrderType()==OP_BUY || OrderType()==OP_SELL)

opened++;

else pending++;

}

if (opened>0 && pending>0)

{

for(i=OrdersTotal()-1; i>=0; i--)

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

if(OrderType()!=OP_BUY && OrderType()!=OP_SELL)

OrderDelete(OrderTicket());

}

} [/PHP]

[PHP] extern int Magic = 68415;

extern int Orario_Inizio = 0;

extern int Orario_Fine = 6;

extern int Buffer = 0;

extern double Lotti = 0.1;

extern int TakeProfit = 10;

extern int StopLoss = 50;

double Massimo;

double Minimo;

int BarCount;

int BarStart;

int BarShift;

double MinLot;

double LotSize;

int i;

int ticket;

string Status;

string BuyStatus1;

string SellStatus1;

double Range;

string CommentoRange;

double pipMultiplier = 1;

int init()

{

}

int start()

{

if (Digits==3 || Digits==5)

{pipMultiplier = 10;}

else {pipMultiplier = 1; }

double TakeProfit1 = TakeProfit*Point*pipMultiplier;

double StopLoss1 = StopLoss*Point*pipMultiplier;

double Buffer1 = Buffer*Point*pipMultiplier;

double StopLossPrice = NormalizeDouble(StopLoss1,Digits);

double TakeProfitPrice = NormalizeDouble(TakeProfit1,Digits);

double BufferPrice = NormalizeDouble(Buffer1,Digits);

//CALCOLA LE BARRE DEL RANGE

if(Orario_Inizio>Orario_Fine)

{

BarCount=24+Orario_Fine-Orario_Inizio;

}

if(Orario_Inizio<Orario_Fine)

{

BarCount=Orario_Fine-Orario_Inizio;

}

//CALCOLA IL MASSIMO E IL MINIMO DEL RANGE

if(Hour()>=Orario_Fine)

{

BarStart=Hour()-Orario_Fine;

BarShift=BarStart+BarCount;

Minimo=iLow(NULL,PERIOD_H1,BarStart);

Massimo=0;

for(i=BarStart;i<=BarShift;i++)

{

Massimo=MathMax(Massimo,iHigh(NULL,PERIOD_H1,i));

Minimo=MathMin(Minimo,iLow(NULL,PERIOD_H1,i));

Range=(Massimo-Minimo)/Point;

}

}

else

{

Massimo=0;

Minimo=0;

return(0);

}

//CONTROLLA SE E' L'ORARIO PER POTER TRADARE

if(Hour()==Orario_Fine && OrdersTotal()<2)

{

//CONTROLLA SE IL MASSIMO E' STATO ROTTO. CONDIZIONE BUY

double OpenPriceBuy = NormalizeDouble((Massimo+BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lotti,OpenPriceBuy,0,OpenPriceBuy-StopLossPrice,OpenPriceBuy+TakeProfitPrice,NULL,Magic,0,Blue);

//CONTROLLA SE IL MINIMO E' STATO ROTTO. CONDIZIONE SELL

double OpenPriceSell = NormalizeDouble((Minimo-BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lotti,OpenPriceSell,0,OpenPriceSell+StopLossPrice,OpenPriceSell-TakeProfitPrice,NULL,Magic,0,Red);

if (ticket != -1)

return(0);

}

}

Qualcuno può aiutare?

 

dasio

Prova a mettere tutto quel codice all'inizio della procedura start(). Probabilmente dovrai filtrare un po' di più il modo in cui stai aprendo gli ordini pendenti, ma se metti quel codice all'inizio ripulirà gli ordini pendenti se qualcuno degli ordini pendenti aperti prima diventa un ordine "regolare".

dasio:
Qualcuno può aiutare?
 

Ciao,

sto imparando molto da questo thread ed è per questo che continuo a fare domande.

Ora. Provo a farlo da solo ma non ho successo.

Premessa: voglio usare questo indicatore in un grafico renko offline.

Il mio scopo è di tracciare sopra o sotto la candela Quanto tempo ha fatto la costruzione.

Quindi so che nella specifica della candela c'è il tempo in cui si è aperta. Così se faccio il tempo della candela corrente meno la candela del precedente ho quello che ho bisogno.

Quindi come posso codificarlo?

Grazie mille

 

Non riesco a capire perché questo codice sta cercando di modificare gli ordini chiusi

Ho aggiunto OrderCloseTime() a entrambe le istruzioni if pensando che questo avrebbe messo fine a questo ticket non valido per l'errore della funzione ordermodify, ma ogni tanto il mio EA perderà il controllo di tutti gli ordini e in qualche modo si mischierà con un ordine chiuso e cercherà continuamente di modificarlo più e più volte creando enormi file di log e non continuerà il trading a meno che non riavvii l'MT4. Non sono esattamente sicuro di come stia raccogliendo un ordine chiuso, forse mentre sta modificando tutti gli ordini uno di essi si chiude in quel breve lasso di tempo e lo manda fuori strada? Come ho detto questo accadrà forse due volte su 30-50 operazioni al giorno.

Qualcuno ha qualche idea su come porre fine a questo?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

Problemi di segnale

mladen

Per favore, voglio ospitare uno script che invierà avvisi di trading a più destinatari, come centinaia di loro, come posso farlo... Ci sono aziende che possono gestire questo che tu o qualcuno su questo forum conosce.

Mastercash:
Mladen Grazie, ho guardato da vicino....Im ancora sperimentando il codice.
 

...

2 pensieri :

1. Se hai intenzione di inviarlo, allora penso che l'unico modo ragionevole sia l'invio di posta e in questo caso perché non usi semplicemente uno dei programmi di spamming e-mail che sono là fuori in libertà?

2. Inviare segnali ha troppi problemi (questa è la mia opinione, alcuni dei problemi dell'invio sono praticamente irrisolvibili). Quindi perché non invertire la logica: invece di inviare, fare un codice che sarà la lettura (con nome utente, pass, e così via ...) da una data posizione e in questo modo si hanno quasi tutti i problemi che l'invio non può risolvere, risolto (compresa la prevenzione di utilizzo da più IP allo stesso tempo)

Quindi, solo alcuni pensieri ...

Mastercash:
mladen Grazie mille il codice ora funziona.L'avviso non si ripete più.Per favore voglio ospitare uno script che sarà l'invio di avvisi di trading a più destinatari, come centinaia di loro, come posso fare che ... Ci sono aziende che possono gestire che voi o qualcuno su questo forum sapere.
 

Provate qualcosa del genere:

#include

#define PAUSE_BEFORE_RETRY 1000

#define NumberOfReTries 3

if (NewOrdersPlaced_s3 && flag_s3 == TRUE)

{

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--)

{

if (!OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != MagicNumber_3) continue;

for (int retry=0; retry<NumberOfReTries; retry++)

{

OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

int error = GetLastError();

switch (error)

{

case ERR_SERVER_BUSY:

case ERR_NO_CONNECTION:

case ERR_INVALID_PRICE:

case ERR_OFF_QUOTES:

case ERR_BROKER_BUSY:

case ERR_TRADE_CONTEXT_BUSY:

Sleep(PAUSE_BEFORE_RETRY);

continue;

case ERR_PRICE_CHANGED:

case ERR_REQUOTE:

continue;

default:

retry=NumberOfReTries;

}

}

NewOrdersPlaced_s3 = FALSE;

}

}
beakon:
Ho aggiunto OrderCloseTime() a entrambe le istruzioni if pensando che questo avrebbe messo fine a questo ticket non valido per l'errore della funzione ordermodify, ma ogni tanto il mio EA perderà il controllo di tutti gli ordini e in qualche modo si mischierà con un ordine chiuso e cercherà continuamente di modificarlo più e più volte creando enormi file di log e non continuerà il trading a meno che non riavvii la MT4. Non sono esattamente sicuro di come stia raccogliendo un ordine chiuso, forse mentre è nel processo di modifica di tutti gli ordini uno di essi si chiude in quel breve tempo e lo manda fuori strada? Come ho detto questo accadrà forse due volte su 30-50 operazioni al giorno.

Qualcuno ha qualche idea su come porre fine a questo?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

Soluzioni di allerta

Penso di aver bisogno di ulteriori spiegazioni su questo, puoi solo darmi un suggerimento su come scrivere e impostare un codice che mi aiuterà a inviare l'avviso a tutti i miei clienti allo stesso tempo.è memorizzando il loro indirizzo e-mail nel database..... ma come sarà il linguaggio del server, ad esempio, script php, raccogliere gli avvisi dalla piattaforma mt4 automaticamente? ......Penso che questo sia il problema, se ci può essere un modo, può essere inviato a più telefoni cellulari o indirizzo e-mail.il tuo consiglio, per favore?

mladen:
2 pensieri :

1. Se hai intenzione di inviarlo, allora penso che l'unico modo ragionevole sia l'invio di posta e in questo caso perché non usi semplicemente uno dei programmi di spamming e-mail che sono là fuori in libertà?

2. Inviare segnali ha troppi problemi (questa è la mia opinione, alcuni dei problemi dell'invio sono praticamente irrisolvibili). Allora perché non invertire la logica: invece di inviare, fare un codice che sarà la lettura (con nome utente, pass, e così via ...) da una data posizione e in questo modo si hanno quasi tutti i problemi che l'invio non può risolvere, risolto (compresa la prevenzione di utilizzo da più IP allo stesso tempo)

Quindi, solo alcuni pensieri ...
 

Mastercash

Prova a cercare su Google "inviare email di massa" e penso che troverai una risposta per questo

Per quanto riguarda la "raccolta degli avvisi": devi avere qualcosa che lo"esporti" in qualche formato leggibile che sarà poi riconosciuto da un software di tua scelta che distribuirà i segnali o permetterà l'accesso a quel segnale

PS: i servizi di segnalazione sono molto più complessi di quanto sembri a prima vista e, se hai intenzione di farne uno, puoi contare su costi sostanziali per farlo funzionare come dovrebbe

Mastercash:
Penso di aver bisogno di più spiegazioni su questo, puoi solo darmi un suggerimento su come scrivere e impostare un codice che mi aiuterà a inviare l'avviso a tutti i miei clienti allo stesso tempo.è memorizzando il loro indirizzo e-mail nel database..... ma come sarà il linguaggio del server, ad esempio, script php, raccogliere gli avvisi dalla piattaforma mt4 automaticamente? ......Penso che questo sia il problema, se ci può essere un modo, può essere inviato a più telefoni cellulari o indirizzo e-mail.il tuo consiglio, per favore?