Come codificare? - pagina 279

 
g.pociejewski:
[lang=pl]Un'altra domanda: il tuo orario è GMT o no? Se non è GMT farò un piccolo cambiamento in questo EA.

L'ho appena fatto, per favore controllatelo, se tutto è a posto.

Distance beetwen low e high stopLoss e TP li ho fatti come variabili esterne.

Grazie Grzesiek[/lang].

Caro Grzesiek

Ho incollato questo indicatore nella cartella esperti e oggi ho monitorato per imparare come funziona. Il problema che ha è che una volta che fa il primo trade e chiude l'ordine o sullo stop o sul t/p allora immediatamente l'EA ricomincia il trade sul prezzo in cui ha chiuso l'ordine recente. Come posso fermarlo nel codice? grazie

 

Qualcuno può aiutarmi?

Ciao Forum

questo codice ha un problema, quando esegue il commercio è OK ma quando chiude l'ordine di nuovo EA apre un nuovo commercio al prezzo e al tempo in cui l'ordine precedente è stato chiuso. Non ho visto alcun errore nel codice. Chi ha scritto questo è molto occupato e non è online. Qualcuno può suggerire qual è il problema?

extern double stopLoss = 35.0;

extern double takeProfit = 50.0;

extern string Begin="00:00";

extern string End="08:00";

extern double distance = 5;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

extern double lots = 1;

int magic = 123;

int slippage = 1;

string comment = "test

int ticket;

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

//| funzione di inizializzazione esperto |

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

int init()

{

//----

//----

return(0);

}

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

//| funzione di deinizializzazione esperto |

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

int deinit()

{

//----

//----

return(0);

}

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

//| funzione di avvio esperto |

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

int start()

{

//----

if(isGoodTime(Begin,End))

{

if(!cond)

{

low = Bid;

high = Ask;

}

cond = true;

if(Bid < low) low = Bid;

se(Ask > high) high = Ask;

}

se((alto - basso)*1000>distanza)

{

cond2 = true;

}

if(!isGoodTime(Begin,End))

{

cond = false;

}

if(!isGoodTime(Inizio,Fine) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0010))

{

if(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);

}

se(èECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0);

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.0010)

{

se(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic);

}

se(èECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0);

}

}

}

}

//----

return(0);

}

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

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true);

}

return(false);

}

int countOrders(int oMagic,int oType) {

int count=0;

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

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2)

{

if(w2 == 0)

return (0);

return (NormalizeDouble(w1, Digits));

}

 

Ciao Avasys,

Per quanto posso dire che non c'è niente di sbagliato nel codice, in base alla tua descrizione fa esattamente quello che è programmato per fare (comprare quando l'Ask è più alto del massimo e vendere quando il bid è più basso del minimo) fondamentalmente continua a comprare e vendere come il massimo e il minimo sono rotti, rispettivamente.

Grazie,

 
Avasys:
Grazie per il tuo commento

C'è un modo per dire al codice di fare trading solo una volta al giorno e solo al primo break out.

L'autore di questo codice è un uomo molto occupato e non potrebbe contribuire molto tempo come sembra

l'aiuto è apprezzato

[lang=pl]//+------------------------------------------------------------------+

//| semplice EA.mq4 |

//| Copyright © 2011, luktom.biz ||

//| www.luktom.biz/en |

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

#property copyright "Copyright © 2011, luktom.biz."

#property link "http://www.luktom.biz"

extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="2:00";

extern string End="10:00";

extern double distance = 60;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

doppio alto;

extern double lots = 0.1;

int magic = 1232344524285020;

int slippage = 1;

string comment = "";

int ticket;

int short = 0;

int long = 0;

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

//| funzione di inizializzazione esperto |

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

int init()

{

//----

//----

return(0);

}

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

//| funzione di deinizializzazione esperto |

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

int deinit()

{

//----

Stampa(countOrders(magic,OP_BUY));

//----

return(0);

}

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

//| funzione di inizio esperto |

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

int start()

{

Stampa(ValutaConto());

//----

if(isGoodTime(Inizio,Fine))

{

short = 0;

long = 0;

if(!cond)

{

low = Bid;

high = Ask;

}

cond = true;

if(Bid < low) low = Bid;

se(Ask > high) high = Ask;

}

se((alto - basso)*1000>distanza)

{

cond2 = true;

}

if(!isGoodTime(Begin,End))

{

cond = false;

}

if(!isGoodTime(Inizio,Fine) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0005) && short == 0)

{

short++;

if(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);

}

se(èECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0);

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.005 && long ==0)

{

long++;

if(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic);

}

se(èECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0);

}

}

}

}

//----

return(0);

}

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

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true);

}

return(false);

}

int countOrders(int oMagic,int oType) {

int count=0;

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

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2)

{

if(w2 == 0)

return (0);

return (NormalizeDouble(w1, Digits));

}

Ora EA apre solo una posizione al giorno. Per quanto riguarda la tua domanda sulle email, da qualche parte nel forum esiste il mio post in questo tema:)

Fammi sapere se lo trovi.

Grazie,

Grzesiek[/lang]

 
Pip:
Ciao Avasys,

Per quanto posso dire non c'è nulla di sbagliato nel codice, in base alla tua descrizione fa esattamente ciò che è programmato per fare (comprare quando l'Ask è più alto del massimo e vendere quando il bid è più basso del minimo) fondamentalmente continua a comprare e vendere come il massimo e il minimo sono rotti, rispettivamente.

Grazie,

Grazie per il tuo commento

C'è un modo per dire al codice di fare trading solo una volta al giorno e solo al primo break out.

L'autore di questo codice è un uomo molto occupato che non può contribuire molto tempo come sembra

e quello che ho notato è che il sistema esegue i trade nonostante il range tra i tempi indicati nel codice sia più di 60 pips il sistema fa ancora trading, fa trading solo se il range tra i tempi specifici (indicati nel codice, vedi tempi di inizio e fine) è meno di 60 pips allora trade.

aiuto è apprezzato

 
g.pociejewski:
[lang=pl]//+------------------------------------------------------------------+

//| semplice EA.mq4 |

//| Copyright © 2011, luktom.biz ||

//| www.luktom.biz/en |

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

#property copyright "Copyright © 2011, luktom.biz."

#property link "http://www.luktom.biz"

extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="2:00";

extern string End="10:00";

extern double distance = 60;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

doppio alto;

extern double lots = 0.1;

int magic = 1232344524285020;

int slippage = 1;

string comment = "";

int ticket;

int short = 0;

int long = 0;

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

//| funzione di inizializzazione esperto |

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

int init()

{

//----

//----

return(0);

}

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

//| funzione di deinizializzazione esperto |

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

int deinit()

{

//----

Stampa(countOrders(magic,OP_BUY));

//----

return(0);

}

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

//| funzione di inizio esperto |

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

int start()

{

Print(AccountCurrency());

//----

if(isGoodTime(Inizio,Fine))

{

short = 0;

long = 0;

if(!cond)

{

low = Bid;

high = Ask;

}

cond = true;

if(Bid < low) low = Bid;

se(Ask > high) high = Ask;

}

se((alto - basso)*1000>distanza)

{

cond2 = true;

}

if(!isGoodTime(Begin,End))

{

cond = false;

}

if(!isGoodTime(Inizio,Fine) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0005) && short == 0)

{

short++;

if(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);

}

se(èECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0);

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.005 && long ==0)

{

long++;

se(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic);

}

se(èECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0);

}

}

}

}

//----

return(0);

}

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

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true);

}

return(false);

}

int countOrders(int oMagic,int oType) {

int count=0;

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

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2)

{

if(w2 == 0)

return (0);

return (NormalizeDouble(w1, Digits));

}

Ora EA apre solo una posizione al giorno. Per quanto riguarda la tua domanda sulle email, da qualche parte nel forum esiste il mio post in questo tema:)

Fammi sapere se lo trovi.

Grazie,

Grzesiek[/lang]

grazie amico,

Ho copiato l'intero codice qui e incollato nel file mq4, ma quando l'ho copiato nella cartella expert non ha funzionato, non ha creato il file ex4 e non è presente nel manu experts advisors. Quindi, per favore, puoi caricare come file mq4 o c'è qualcosa nel codice, perché ho provato diverse volte

 

Rilevare le posizioni x,y del clic del mouse sul grafico

È possibile rilevare la posizione di un clic del mouse in MT4? Non sto parlando di WindowOnDrop. Se conosco le coordinate x,y dello schermo, posso convertirle nel prezzo/tempo corrispondente?

Grazie per il vostro aiuto.

Cordiali saluti,

Tiffany

 

Caro amico

Oggi, lunedì, il codice (quello vecchio che funzionava giovedì e venerdì) non ha funzionato affatto

Ho inserito manualmente le transazioni,

 

Sistema semplice: Necessita di pochissime raccomandazioni EA

Ecco la logica

Commerciare quando la gamma tra GMT 02:00 e 10:00 è inferiore a 60 pips poi aprire vendere SE il prezzo rompe minimo - 5pips linea o comprare se il prezzo rompe massimo + 5 pips linea. ED ESEGUIRE SOLO UN COMMERCIO AL GIORNO, NON IMPORTA COMMERCIO È ANNULLATO CHIUSO ALLO STOP O PRESO PROFITTO SOLO UN ORDINE AL GIORNO.

Ecco il codice, ma non funziona, in EA MANU di MT4 ha l'icona inattiva e non c'è nessun file ex4 nella cartella esperti, non riesco a capire cosa c'è di sbagliato

extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin = "2: 00";

extern string End = "10: 00";

extern double distance = 60;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

doppio alto;

extern double lots = 0.1;

int magic = 1232344524285020;

int slippage = 1;

string comment = "";

int ticket;

int short = 0;

long int = 0;

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

//| funzione di inizializzazione esperto |

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

int init()

{

//----

//----

(0) ritorno;

}

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

//| funzione di deinizializzazione esperto |

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

int deinit ()

{

//----

Stampa (countOrders (magic, OP_BUY));

//----

(0) return;

}

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

//| funzione di inizio esperto |

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

int start()

{

Stampa (ContoValuta ());

//----

if (isGoodTime (Inizio, Fine))

{

short = 0;

long = 0;

se (! cond)

{

low = Bid;

high = Ask;

}

cond = true;

se (Bid < low) low = Bid;

se (Ask > high) high = Ask;

}

se ((alto-basso) * 1000 > distanza)

{

cond2 = true;

}

if (! isGoodTime (Begin, End))

{

cond = false;

}

if (! isGoodTime (Inizio, Fine) & & cond2)

{

se (countOrders (magic, OP_SELL) == 0)

{

se (Bid ≪ = (CRL-0.0005) & & short == 0)

{

short + +;

se (isECN == false)

{

OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Ask-takeProfit * Point, takeProfit), comment, magic);

}

se (isECN)

{

ticket = OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, 0,0, comment, magic);

OrderSelect (ticket, SELECT_BY_TICKET);

OrderModify (ticket, OrderOpenPrice (), sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Bid-takeProfit * Point, takeProfit), 0);

}

}

}

if (countOrders (magic, OP_BUY) == 0)

{

if ((Ask-high) > = 0.005 & & long = = 0)

{

long + +;

se (isECN == false)

{

OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, sltpValue (Ask-stopLoss * Point, stopLoss), sltpValue (Bid + takeProfit * Point, takeProfit), comment, magic);

}

se (isECN)

{

ticket = OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, 0,0, comment, magic);

OrderSelect (ticket, SELECT_BY_TICKET);

OrderModify (ticket, OrderOpenPrice (), sltpValue (Bid-stopLoss * Point, stopLoss), sltpValue (Ask + takeProfit * Point, takeProfit), 0);

}

}

}

}

//----

(0) ritorno;

}

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

bool isGoodTime (string, string, Begin, End) {

if (TimeCurrent () > Localtime (Begin) & & TimeCurrent < Localtime () (End)) {

return (true);

}

return (false);

}

int countOrders (int, int oMagic oType) {

int count = 0;

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

if (OrderSelect (i, SELECT_BY_POS)) {

if (OrderMagicNumber () == oMagic) {

se (OrderSymbol () = i = Symbol ()) {

se (OrderType () == oType || oType < 0) {

conteggio ++;

}

}

}

}

}

return (count);

}

double sltpValue (double, int w1 w2)

{

se (w2 = = 0)

ritorno (0);

return (NormalizeDouble (w1, Digits));

}

 

EAs di Forex.com

Sono un idiota. Ho postato questo nel forum sbagliato... e non so come spostarlo nel forum di programmazione. Mi scuso per l'inconveniente; l'errore non era intenzionale.

Faccio trading spot forex da 3 anni e ho sviluppato 2 EAs. Questi EAs funzionano bene su Glocap, FXCM e Alpari (sono residente negli Stati Uniti, quindi la mia scelta di broker è un po' limitata). Inoltre, voglio un conto MT4 con la commissione incorporata nello spread (preferenza personale).

Ho recentemente testato questi EAs su un conto demo di Forex.com (Gain Capital). Entrambi gli EAs hanno funzionato bene e hanno negoziato secondo le regole programmate. Tuttavia, quando ho aperto un conto live con Forex.com, l'EA #1 non funziona più correttamente, ma l'EA #2 funziona bene. L'EA #1 funziona bene nel tester di strategia di Forex.com, ma so che questo non conta molto. Tutta questa cosa è molto strana per me, perché entrambi gli EA usano lo stesso codice per aprire le operazioni (l'errore sull'EA #1 arriva quando si cerca di aprire le operazioni), impostare il dimensionamento dei lotti, monitorare le operazioni e chiudere le operazioni. Ecco un po' di informazioni su entrambi gli EA:

EA #1 EUR/JPY Usa l'indicatore Ichimoku

EA #2 EUR/USD Usa 3 medie mobili e MACD

Come ho detto prima, EA #2 negozia bene; lavora secondo le regole programmate. Quando l'EA #1 prova ad aprire delle operazioni, ricevo il seguente messaggio di errore: 2011.11.21 17:00:02 Ichimoku_1700Eastern EURJPYpro,H1: Ichimoku_Open EA per EURJPYpro: Errore nell'apertura dell'ordine BUY: (133) trade is disabled /// for 103.7210

Inoltre, quando l'EA #2 cerca di piazzare una compravendita, il log degli esperti mostra sempre che la std.lib viene caricata immediatamente prima delle compravendite che danno un errore (questo non succede con l'EA #1):2011.11.21 17:00:02 stdlib EURJPYpro,H1: loaded successfully

Ecco il pezzo finale di questo puzzle: l'EA #2 aprirà le compravendite ma non a 1700 Eastern. Tutti gli errori lanciati si sono verificati su operazioni che cercavano di aprirsi a 1700 Eastern (questa potrebbe essere una coincidenza).

Ho smontato l'EA, ho riscritto il codice da zero, ho copiato il codice dall'EA #1 nell'EA #2 e niente sembra risolvere il problema. Forex.com non vuole aiutarmi perché lo considerano "supporto EA" che non offrono. In quello che posso trovare su Internet su questo errore, significa che a) il broker non permette il trading EA (che so non essere vero) o b) il trade sta inviando stop e/o limiti che non funzionano con un broker a esecuzione istantanea (il trade NON sta inviando stop o limiti). Forex.com ha detto che NON sospendono il trading in nessun momento della giornata di trading.

Le mie domande per questo gruppo sono le seguenti:

1. Qualcuno ha mai incontrato questo problema?

2. Se sì, cosa avete fatto per risolverlo?

3. Se non avete mai visto questo problema, cosa pensate possa essere la causa?

Sono sicuro che si tratta di qualcosa di semplice che non sto vedendo. Qualsiasi commento, racconto di esperienza e pensiero dal campo sinistro sarebbe molto apprezzato.