[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 131
Ho rielaborato un pezzo di codice su quello che ho chiesto ieri. Ora tutto è come dovrebbe essere. Qui sotto ci sono 3 funzioni per mostrare cosa viene usato per ottenere il segnale originale, dato che questo è solo l'inizio di quello che sto scrivendo.
//+-------------------------------------------------------------------------------------+//| Открытие позиций |//+-------------------------------------------------------------------------------------+bool Trade(int signal)
{
double fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
double slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
DeletePendingOrders();
if (signal == SIGNAL_BUY)
if (!OpenBuy(fastMa, slowMa))
return(false);
if (signal == SIGNAL_SELL)
if (!OpenSell(fastMa, slowMa))
return(false);
return (true);
}
//+-------------------------------------------------------------------------------------+//| Получаем общий сигнал на открытие позиции |//+-------------------------------------------------------------------------------------+int GetSignal()
{
// Получаем значения машек для дальнейших рассчётовdouble fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
double slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
// double filtrMa = iMA(NULL,i_TF,i_filtrMaPeriod,0,MODE_SMA,MODE_CLOSE,0);if (FindOrders() > 0) // Если есть открытые ордера, то..return (SIGNAL_NO); //..ничего не делаемif (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_UP) // Если машки указывают вверхif ( (MathAbs(High[0] - fastMa) <= 0.1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) ) // Цена вблизи 0.1пп от fastMareturn(SIGNAL_BUY); // Функция возвращает сигнал покупки// if (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_DOWN)// return(SIGNAL_SELL);return (SIGNAL_NO);
}
Ecco la funzione di acquisto:
//+-------------------------------------------------------------------------------------+//| Открытие длинной позиции |//+-------------------------------------------------------------------------------------+bool OpenBuy(double fastMa, double slowMa)
{
int ticket = -1;
// if ( (MathAbs(High[0] - fastMa) <= 0.1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )
{
if ((fastMa + i_thresholdFromMa * pt) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенникомPrint("fastMa = ", DoubleToStr(fastMa,Digits));
Print("i_thresholdFromMa = ", DoubleToStr(i_thresholdFromMa * pt,Digits));
ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
Print("OrderOpenPrice() = ", DoubleToStr(OrderOpenPrice(),Digits));
}
if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
return (true);
}
abbiamo una posizione che si apre al prezzoND(fastMa + i_thresholdFromMa * pt), ma non si apre affatto. Perché?
Sto lottando da 2 giorni, non so cosa fare. Nel codice, tutto è uguale. Non ho scritto nessun assegno per davvero, li sto scrivendo per tester ora.
Ecco uno screenshot, per esempio,
Sul grafico si può vedere che il prezzo non è superiore a fastMa (rosso), e inferiore in generale. Ma nel codice, la condizione che l'ordine pendente debba essere al prezzo è esplicitamente indicata:
ND(fastMa + i_thresholdFromMa * pt)
Qual è la fregatura, professionisti? Non so più cosa fare...
Salve. Hoscritto un indicatore basato sull'indicatore, l'indicatore originale Signal-Signal mostra i suoi valori su tutte le barre precedenti quando è attaccato al grafico (è applicato a tutte le barre, a partire dalla barra [1]), ma l'indicatore creato da esso (è applicato alla barra [0]) mostra i suoi valori solo quando è attaccato al grafico, i suoi valori sono corretti ma sulle barre precedenti "vuoti", per favore ditemi come risolvere il problema.
Victor, penso che dovresti mettere una pausa su Asc + distanza, e nella condizione specificare il rapporto tra Asc e Mashka, allora sarà quello che vuoi. Provate!
Potete vedere sul grafico che il prezzo non è al di sopra di fastMa (il braccialetto rosso), ma del tutto al di sotto. Ma nel codice, la condizione è esplicitamente indicata che la pausa deve essere al prezzo:
Qual è la fregatura, professionisti? Non so più cosa fare...
Forse al momento in cui l'ordine è stato effettuato la MA era più bassa di quella disegnata ora. Provate a prendere i valori MAA non dalla 0a barra ma dalla 1a.
Victor, penso che dovresti mettere una pausa su Asc + distanza, e nella condizione specificare il rapporto tra Asc e Mashka, allora sarà quello che vuoi. Provate!
Boris, è quello che ho fatto:
//+-------------------------------------------------------------------------------------+//| Получаем общий сигнал на открытие позиции |//+-------------------------------------------------------------------------------------+int GetSignal()
{
// Получаем значения машек для дальнейших рассчётовdouble fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
double slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,0);
// double filtrMa = iMA(NULL,i_TF,i_filtrMaPeriod,0,MODE_SMA,MODE_CLOSE,0);if (FindOrders() > 0) // Если есть открытые ордера, то..return (SIGNAL_NO); //..ничего не делаемif (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_UP) // Если машки указывают вверх// if ( (MathAbs(High[0] - fastMa) <= 0.1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) ) // Цена вблизи 0.1пп от fastMaif ( (MathAbs(Ask - fastMa) <= 0.1 * pt ) || ( MathAbs(Ask - fastMa) <= 0.1 * pt) )
return(SIGNAL_BUY); // Функция возвращает сигнал покупки// if (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_DOWN)// return(SIGNAL_SELL);return (SIGNAL_NO);
}
Ed ecco l'apertura della posizione:
//+-------------------------------------------------------------------------------------+//| Открытие длинной позиции |//+-------------------------------------------------------------------------------------+bool OpenBuy(double fastMa, double slowMa)
{
int ticket = -1;
if ((fastMa + i_thresholdFromMa * pt) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенникомPrint("fastMa = ", DoubleToStr(fastMa,Digits));
Print("i_thresholdFromMa = ", DoubleToStr(i_thresholdFromMa * pt,Digits));
ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
Print("OrderOpenPrice() = ", DoubleToStr(OrderOpenPrice(),Digits));
if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
return (true);
}
Tutto sembra essere corretto. Ma è ancora lì.
Sepulca: Forse al momento dell'ordine, il MAHA era più basso di quello che viene disegnato ora. Prova a prendere i valori MA dalla 1a barra invece che dalla 0a.
Provato, nessuna differenza. L'ho rimesso a posto... Quello che conta per me è quello che sta succedendo in questo momento, non quello che è successo prima.
Ecco uno screenshot (se il valore ricevuto dalla macchina non è 0, ma 1):
Victor, è per questo che scrivo le condizioni all'inizio, in modo da poter vedere tutto, così è più facile trovare gli errori logici, soprattutto quando non c'è ancora abbastanza conoscenza ed esperienza, cosa tra cui mi annovererò per molto tempo a venire. I professionisti manipolano facilmente funzioni, file e librerie, e hanno probabilmente dimenticato come hanno gradualmente acquisito tutta questa saggezza. Ma non possiamo imparare la teoria senza la pratica, e molto di più dipende dal carattere di ogni persona.
Provato, nessuna differenza. L'ho rimesso a posto... Quello che conta per me è quello che sta succedendo in questo momento, non quello che stava succedendo prima.
Ecco uno screenshot (se il valore ricevuto dalla macchina non è 0, ma 1):
Infine, dimmi esattamente cosa vuoi fare... Per esempio: MAA tale e quale sta salendo ed è sopra MAA tale e quale e il prezzo è sopra/sotto MAA tale e quale e se è vero, allora piazza un ordine pendente a tale e tale distanza. Vi darò un algoritmo approssimativo. A causa di tutti questi frammenti di codice, strappati dal contesto, è difficile indirizzarvi nella giusta direzione. E il problema è per il quinto grado (esagerato).
Per quanto riguarda l'evidenziato: lavorate sui prezzi aperti, allora non vedrete i MAC ridisegnare sulla barra zero
IMHO, non difficile, ma molto facile da "dirigere" o inviare, perché il compagno è troppo zelante nella sua lotta contro le bustine e gli scaffali, non preoccupandosi di studiare il libro di testo e la documentazione. :-)
IMHO, non difficile, ma molto facile da "dirigere" o inviare, perché il compagno è troppo zelante nella lotta contro le bustine e gli scaffali, non preoccupandosi di studiare il libro di testo e la documentazione. :-)
Amico, non ci sono praticamente insidie ... Non ci sono miracoli. Così un uomo si è circondato di queste pietre e le muove, le sposta.
Ho rielaborato un pezzo di codice su quello che ho chiesto ieri. Ora tutto è come dovrebbe essere. Qui sotto ci sono 3 funzioni per mostrare cosa viene usato per ottenere il segnale originale, dato che questo è solo l'inizio di quello che sto scrivendo.
Ecco la funzione di acquisto:
Ecco la linea:
abbiamo una posizione che si apre al prezzoND(fastMa + i_thresholdFromMa * pt), ma non si apre affatto. Perché?
Sto lottando da 2 giorni, non so cosa fare. Nel codice, tutto è uguale. Non ho scritto nessun assegno per davvero, li sto scrivendo per tester ora.
Ecco uno screenshot, per esempio,
Sul grafico si può vedere che il prezzo non è superiore a fastMa (rosso), e inferiore in generale. Ma nel codice, la condizione che l'ordine pendente debba essere al prezzo è esplicitamente indicata:
Qual è la fregatura, professionisti? Non so più cosa fare...
Salve. Hoscritto un indicatore basato sull'indicatore, l'indicatore originale Signal-Signal mostra i suoi valori su tutte le barre precedenti quando è attaccato al grafico (è applicato a tutte le barre, a partire dalla barra [1]), ma l'indicatore creato da esso (è applicato alla barra [0]) mostra i suoi valori solo quando è attaccato al grafico, i suoi valori sono corretti ma sulle barre precedenti "vuoti", per favore ditemi come risolvere il problema.
Il mio codice:
#property indicator_separate_window #property indicator_minimum -7 #property indicator_maximum 7 #property indicator_buffers 2 #property indicator_color1 Yellow #property indicator_color2 DarkOrange #property indicator_width1 2 #property indicator_width2 2 #property indicator_level1 0.0 //--- buffers double UpMapBuffer[]; double DnMapBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,UpMapBuffer); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,DnMapBuffer); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int vb; // внутренний бар int i; for(i=1;i<Bars-34-1;i++) { double AO_Sig_Sig_1 = iCustom(NULL,0,"Signal-Signal",0,i); double AO_Sig_Sig_2 = iCustom(NULL,0,"Signal-Signal",0,i+1); if((High[i]<=High[i+1])&&(Low[i]>=Low[i+1])&&(AO_Sig_Sig_1==AO_Sig_Sig_2)) vb++; if((AO_Sig_Sig_1!=AO_Sig_Sig_2)||(i>3+vb)) break; } i=i*(AO_Sig_Sig_1); if(MathAbs(i)>3+vb) i=0; if(i>0) { UpMapBuffer[0]=i; } else { UpMapBuffer[0]=0; } if(i<0) { DnMapBuffer[0]=i; } else { DnMapBuffer[0]=0; } //---- return(0); } //+------------------------------------------------------------------+Victor, penso che dovresti mettere una pausa su Asc + distanza, e nella condizione specificare il rapporto tra Asc e Mashka, allora sarà quello che vuoi. Provate!
Potete vedere sul grafico che il prezzo non è al di sopra di fastMa (il braccialetto rosso), ma del tutto al di sotto. Ma nel codice, la condizione è esplicitamente indicata che la pausa deve essere al prezzo:
Qual è la fregatura, professionisti? Non so più cosa fare...
Victor, penso che dovresti mettere una pausa su Asc + distanza, e nella condizione specificare il rapporto tra Asc e Mashka, allora sarà quello che vuoi. Provate!
Boris, è quello che ho fatto:
Ed ecco l'apertura della posizione:
Tutto sembra essere corretto. Ma è ancora lì.
Forse al momento dell'ordine, il MAHA era più basso di quello che viene disegnato ora. Prova a prendere i valori MA dalla 1a barra invece che dalla 0a.
Provato, nessuna differenza. L'ho rimesso a posto... Quello che conta per me è quello che sta succedendo in questo momento, non quello che è successo prima.
Ecco uno screenshot (se il valore ricevuto dalla macchina non è 0, ma 1):
Victor, è per questo che scrivo le condizioni all'inizio, in modo da poter vedere tutto, così è più facile trovare gli errori logici, soprattutto quando non c'è ancora abbastanza conoscenza ed esperienza, cosa tra cui mi annovererò per molto tempo a venire. I professionisti manipolano facilmente funzioni, file e librerie, e hanno probabilmente dimenticato come hanno gradualmente acquisito tutta questa saggezza. Ma non possiamo imparare la teoria senza la pratica, e molto di più dipende dal carattere di ogni persona.
Boris, è quello che ho fatto:
Ed ecco l'apertura della posizione:
Tutto sembra essere giusto. Ma è ancora lì.
Provato, nessuna differenza. L'ho rimesso a posto... Quello che conta per me è quello che sta succedendo in questo momento, non quello che stava succedendo prima.
Ecco uno screenshot (se il valore ricevuto dalla macchina non è 0, ma 1):
Infine, dimmi esattamente cosa vuoi fare... Per esempio: MAA tale e quale sta salendo ed è sopra MAA tale e quale e il prezzo è sopra/sotto MAA tale e quale e se è vero, allora piazza un ordine pendente a tale e tale distanza. Vi darò un algoritmo approssimativo. A causa di tutti questi frammenti di codice, strappati dal contesto, è difficile indirizzarvi nella giusta direzione. E il problema è per il quinto grado (esagerato).
Per quanto riguarda l'evidenziato: lavorate sui prezzi aperti, allora non vedrete i MAC ridisegnare sulla barra zero
... è difficile indicarti la direzione giusta...
IMHO, non difficile, ma molto facile da "dirigere" o inviare, perché il compagno è troppo zelante nella sua lotta contro le bustine e gli scaffali, non preoccupandosi di studiare il libro di testo e la documentazione. :-)
IMHO, non difficile, ma molto facile da "dirigere" o inviare, perché il compagno è troppo zelante nella lotta contro le bustine e gli scaffali, non preoccupandosi di studiare il libro di testo e la documentazione. :-)
Così un uomo si è circondato di queste pietre e le muove, le sposta.
Grazie mille. esattamente quello che serve)