[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 368
Ho un compito, sembra facile a prima vista, ma non funziona. C'è una matrice in cui i valori sono sempre in una riga (in alcuni casi i valori possono andare in ordine crescente, in altri casi - in ordine decrescente). C'è un po' di livello (rosso nella foto). Devi trovare i due valori della matrice che sono più vicini al livello della linea rossa. Nella figura a) questi saranno valori di matrice con indici 0 e 1. Nella figura b) questi saranno valori di matrice con indici 2 e 1. Nelle figure c) e f) questi saranno valori di matrice con indici 0 e 0. Nelle figure d) ed e) questi saranno valori di matrice con indici 2 e 2.
Per favore, ditemi come risolvere questo problema. Grazie in anticipo.
Allora non ti preoccupare - sposta semplicemente il codice dell'indicatore nell'Expert Advisor come è per soddisfare i criteri di trading e questo è tutto - poi nel tabellone usando queste condizioni di trading trasferite da questo indicatore apri posizioni attraverso l'Expert Advisor e questo è tutto...
Oggi è sabato - giorno di riposo. Si avvia l'EA, avviene l'inizializzazione, ma dato che è giorno di riposo e non ci sono tick, la funzione di avvio non viene avviata (cioè Trade() non viene chiamata). Per controllare se funziona correttamente, dovete inserire la chiamata di questa funzione nel blocco di inizializzazione, o testarla nel tester.
Dopo aver sostituito questa funzione in Init() e aver aggiunto il codice di controllo Print(DayOfWeek()) si è scoperto che l'ora veniva presa dal server, e l'ora del server era venerdì...
L'altro ieri il tester funzionava come dovrebbe. Da ieri sera, qualsiasi versione della strategia nel tester apre un trade e dopo un secondo, o qualche minuto/ora di storia, il tester smette di funzionare. Nessun errore, niente.
Qualcuno ha qualche problema? Si prega di consigliare
Qui sotto c'è la sezione problematica nella sua interezza, estratta dall'EA.
extern int MAGIC= 1;
int start()
{
//----int tt = 0;
double SchBuyLots = SchBuyLots_b(MAGIC);
double SchSellLots = SchSellLots_b(MAGIC);
double SchBuyLots100 = SchBuyLots100_b();
double SchSellLots100 = SchSellLots100_b();
double SchBuyLimitLots = SchBuyLimitLots_b(MAGIC);
double SchSellLimitLots = SchSellLimitLots_b(MAGIC);
double SchBuyStopLots100 = SchBuyStopLots100_b();
double SchSellStopLots100 = SchSellStopLots100_b();
double dy=0;
double dx=SchBuyLots+SchBuyLots100-SchSellLots-SchSellLots100;
if (dx!=0) dy=MathAbs(dx);
double zx=SchBuyLimitLots-SchSellLimitLots;
if (dx>0 && dy+zx!=SchSellStopLots100)tt=1; else tt=2;
Alert (dy+zx,"---",SchSellStopLots100,"---",tt);
//----return(0);
}
//+------------------------------------------------------------------+// ----------------- SchBuyLots() ---------------------------------------------// Функция возвращает суммарный лот Бай-ордеров для Магика//----------------------------------------------------------------double SchBuyLots_b(int MAGIC) {
double SchBuyLots=0;
int i;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--) {//Начало циклаif (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
else{//начало работы с выбранным ордеромif(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC){
if(OrderType()==OP_BUY) {
SchBuyLots=SchBuyLots+OrderLots();
}
}
}//конец работы с выбранным ордером
}//Конец циклаreturn(SchBuyLots);
}
// ----------------------------------------------------------------------------// ----------------- SchSellLots() ---------------------------------------------// Функция возвращает суммарный лот Сейл-ордеров для Магика//-----------------------------------------------------------------double SchSellLots_b(int MAGIC) {
double SchSellLots=0;
int i;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--) {//Начало циклаif (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
else{//начало работы с выбранным ордеромif(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC) {
if(OrderType()==OP_SELL) {
SchSellLots=SchSellLots+OrderLots();
}
}
}//конец работы с выбранным ордером
}//Конец циклаreturn(SchSellLots);
}
// -------------------------------------------------------------------------------// ----------------- SchBuyLots100() ---------------------------------------------// Функция возвращает суммарный лот Бай-ордеров для Магика 100//--------------------------------------------------------------------------------double SchBuyLots100_b() {
double SchBuyLots100=0;
int i;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--) {//Начало циклаif (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
else{//начало работы с выбранным ордеромif(OrderSymbol()== SMB && OrderMagicNumber()==100) {
if(OrderType()==OP_BUY) {
SchBuyLots100=SchBuyLots100+OrderLots();
}
}
}//конец работы с выбранным ордером
}//Конец циклаreturn(SchBuyLots100);
}
// --------------------------------------------------------------------------------// ----------------- SchSellLots100() ---------------------------------------------// Функция возвращает суммарный лот Сейл-ордеров для Магика 100//---------------------------------------------------------------------------------double SchSellLots100_b() {
double SchSellLots100=0;
int i;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--) {//Начало циклаif (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
else{//начало работы с выбранным ордеромif(OrderSymbol()== SMB && OrderMagicNumber()==100) {
if(OrderType()==OP_SELL) {
SchSellLots100=SchSellLots100+OrderLots();
}
}
}//конец работы с выбранным ордером
}//Конец циклаreturn(SchSellLots100);
}
// ----------------------------------------------------------------------------// ----------------- SchBuyLimitLots() ------------------------------------------// Функция возвращает суммарный лот BuyLimit-ордеров для Магика//------------------------------------------------------------------------------double SchBuyLimitLots_b(int MAGIC) {
double SchBuyLimitLots=0;
int i;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--) {//Начало циклаif (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
else{//начало работы с выбранным ордеромif(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC){
if(OrderType()==OP_BUYLIMIT) {
SchBuyLimitLots=SchBuyLimitLots+OrderLots();
}
}
}//конец работы с выбранным ордером
}//Конец циклаreturn(SchBuyLimitLots);
}
// ----------------------------------------------------------------------------// ----------------- SchSellLimitLots() ----------------------------------------// Функция возвращает суммарный лот SellLimit-ордеров для Магика//-----------------------------------------------------------------------------double SchSellLimitLots_b(int MAGIC) {
double SchSellLimitLots=0;
int i;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--) {//Начало циклаif (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
else{//начало работы с выбранным ордеромif(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC) {
if(OrderType()==OP_SELLLIMIT) {
SchSellLimitLots=SchSellLimitLots+OrderLots();
}
}
}//конец работы с выбранным ордером
}//Конец циклаreturn(SchSellLimitLots);
}
// -------------------------------------------------------------------------------// ----------------- SchBuyStopLots100() -----------------------------------------// Функция возвращает суммарный лот BuyStop-ордеров для Магика 100//--------------------------------------------------------------------------------double SchBuyStopLots100_b() {
double SchBuyStopLots100=0;
int i;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--) {//Начало циклаif (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
else{//начало работы с выбранным ордеромif(OrderSymbol()== SMB && OrderMagicNumber()==100) {
if(OrderType()==OP_BUYSTOP) {
SchBuyStopLots100=SchBuyStopLots100+OrderLots();
}
}
}//конец работы с выбранным ордером
}//Конец циклаreturn(SchBuyStopLots100);
}
// --------------------------------------------------------------------------------// ----------------- SchSellStopLots100() -----------------------------------------// Функция возвращает суммарный лот SellStop-ордеров для Магика 100//---------------------------------------------------------------------------------double SchSellStopLots100_b() {
double SchSellStopLots100=0;
int i;
string SMB=Symbol();
for (i=OrdersTotal()-1;i>=0;i--) {//Начало циклаif (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
else{//начало работы с выбранным ордеромif(OrderSymbol()== SMB && OrderMagicNumber()==100) {
if(OrderType()==OP_SELLSTOP) {
SchSellStopLots100=SchSellStopLots100+OrderLots();
}
}
}//конец работы с выбранным ордером
}//Конец циклаreturn(SchSellStopLots100);
}
// --------------------------------------------------------------------------------
Si prega di prestare attenzione alla linea (quasi all'inizio):
if (dx>0 && dy+zx!=SchSellStopLots100)tt=1; else tt=2;
Per qualche ragione, quando i valori dy+zx e SchSellStopLots100 sono ugualiseparatamente (ho controllato con allerts) in questa espressionenon sono più uguali tra loro, e la variabile tt prende il valore 1 invece di 2.
Le condizioni di trading del server sono cambiate durante il fine settimana... Dovresti fare dei test su un terminale separato non collegato a un broker/rete, usando un'utility speciale per impostare il giusto spread. Meglio cercare articoli sui test degli EA e su come farlo correttamente.
splxgf: Meglio controllare tramite ND o differenze modulo meno di qualche delta.
Per qualche ragione, sommando dy e zx si ottiene un numero 0,3 (nel mio particolare test della situazione attuale del mercato) quando rispetto a questo numero non è uguale. Cioè, aggiungo dy+zx e ottengo 0,3. Confronto dy+zx con 0,3 - non sono uguali.
Confrontando dy e zx con i numeri che restituiscono - le uguaglianze funzionano come dovrebbero.
L'altro ieri il tester funzionava come dovrebbe. Da ieri sera, qualsiasi versione della strategia nel tester apre un trade e dopo un secondo, o qualche minuto/ora di storia, il tester smette di funzionare. Nessun errore, niente.
Qualcuno ha qualche problema? Si prega di consigliare
Il tester ha un caricatore. Tutto è scritto lì. Non ci sono telepati qui per leggere i log del tuo tester a distanza.
Buon pomeriggio!
Ho un compito, sembra facile a prima vista, ma non funziona. C'è una matrice in cui i valori sono sempre in una riga (in alcuni casi i valori possono andare in ordine crescente, in altri casi - in ordine decrescente). C'è un po' di livello (rosso nella foto). Devi trovare i due valori della matrice che sono più vicini al livello della linea rossa. Nella figura a) questi saranno valori di matrice con indici 0 e 1. Nella figura b) questi saranno valori di matrice con indici 2 e 1. Nelle figure c) e f) questi saranno valori di matrice con indici 0 e 0. Nelle figure d) ed e) questi saranno valori di matrice con indici 2 e 2.
Per favore, ditemi come risolvere questo problema. Grazie in anticipo.
Allora non ti preoccupare - sposta semplicemente il codice dell'indicatore nell'Expert Advisor come è per soddisfare i criteri di trading e questo è tutto - poi nel tabellone usando queste condizioni di trading trasferite da questo indicatore apri posizioni attraverso l'Expert Advisor e questo è tutto...
Grazie, lo sto risolvendo :)
Non c'è di che... Tutti ci sono passati. :-)
Oggi è sabato - giorno di riposo. Si avvia l'EA, avviene l'inizializzazione, ma dato che è giorno di riposo e non ci sono tick, la funzione di avvio non viene avviata (cioè Trade() non viene chiamata). Per controllare se funziona correttamente, dovete inserire la chiamata di questa funzione nel blocco di inizializzazione, o testarla nel tester.
Dopo aver sostituito questa funzione in Init() e aver aggiunto il codice di controllo Print(DayOfWeek()) si è scoperto che l'ora veniva presa dal server, e l'ora del server era venerdì...
Sostituito
a
e ha funzionato come previsto.
Grazie.
Ciao, compagni!
Ha affrontato un problema inaspettato.
L'altro ieri il tester funzionava come dovrebbe. Da ieri sera, qualsiasi versione della strategia nel tester apre un trade e dopo un secondo, o qualche minuto/ora di storia, il tester smette di funzionare. Nessun errore, niente.
Qualcuno ha qualche problema? Si prega di consigliare
Salve.
Per favore aiutatemi a trovare l'errore.
Qui sotto c'è la sezione problematica nella sua interezza, estratta dall'EA.
Si prega di prestare attenzione alla linea (quasi all'inizio):
Per qualche ragione, quando i valori dy+zx e SchSellStopLots100 sono uguali separatamente (ho controllato con allerts) in questa espressione non sono più uguali tra loro, e la variabile tt prende il valore 1 invece di 2.
Vi chiedo di aiutarmi a trovare il difetto.
Grazie in anticipo.
(controllato con allerts)
Meglio controllare tramite ND o differenze modulo meno di qualche delta.
Per qualche ragione, sommando dy e zx si ottiene un numero 0,3 (nel mio particolare test della situazione attuale del mercato) quando rispetto a questo numero non è uguale. Cioè, aggiungo dy+zx e ottengo 0,3. Confronto dy+zx con 0,3 - non sono uguali.
Confrontando dy e zx con i numeri che restituiscono - le uguaglianze funzionano come dovrebbero.
Indovinello.
Per favore, aiutatemi.
Ciao, compagni!
Ha affrontato un problema inaspettato.
L'altro ieri il tester funzionava come dovrebbe. Da ieri sera, qualsiasi versione della strategia nel tester apre un trade e dopo un secondo, o qualche minuto/ora di storia, il tester smette di funzionare. Nessun errore, niente.
Qualcuno ha qualche problema? Si prega di consigliare