Durante il test di Expert Advisors: Exp_TEMA.mq5, dall'articolo: "Creazione di un Expert Advisor che fa trading su diversi simboli". , l'espressione Told[] Tnew[1]ottiene i seguenti valori: Told[] L'espressione non può essere valutata Tnew[1] Intervallo di array non valido.
E My_First_EA.mq5, dall'articolo: "A Step-by-Step Guide to Writing MQL5 Expert Advisors for Beginners", l'espressione New_Time[1] ottiene il valore:Invalid array range
Cosa sono i valori Expression could not be evaluated,Invalid array range, e come influenzano i risultati degli esperti?
Tnew[1] - fuori dall'array, l'array è descritto come Tnew[1], quindi i suoi elementi sono accessibili solo come Tnew[0], perché l'indice inizia a zero.
Tnew[1] - fuori dall'array, l'array è descritto come Tnew[1], quindi i suoi elementi sono accessibili solo come Tnew[0], perché l'indice inizia a zero.
Per quanto riguarda Tnew, ne ho già parlato in un altro thread del forum, forse era necessario un commento da parte degli sviluppatori :)
Per favore, ditemi come aprire un solo trade per condizione. Con il mio codice, il terminale apre diverse offerte su questa condizione, ma io ho bisogno di una sola.
if(Buy_Signal) { mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit mrequest.type = ORDER_TYPE_BUY; // ордер на покупку //--- отсылаем ордер OrderSend(mrequest,mresult); }
if(Sell_Signal) { mrequest.price = NormalizeDouble(latest_price.bid,_Digits); // последняя цена Bid mrequest.sl = NormalizeDouble(latest_price.bid + STP*_Point,_Digits); // Stop Loss mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits); // Take Profit mrequest.type= ORDER_TYPE_SELL; // ордер на продажу //--- отсылаем ордер OrderSend(mrequest,mresult); }
Il risultato è la seguente immagine:
Come posso controllare se un affare è stato fatto con questa condizione o no? Ho provato in questo modo, ma non funziona:
// в этом цикле поочередно перебираем все открытые позиции for(i=0;i<PositionsTotal();i++) { // выбираем позиции только по "нашему" инструменту if(Symbol()==PositionGetSymbol(i)) ... }
Per favore, ditemi come aprire un solo trade per condizione. Con il mio codice, il terminale apre diverse offerte su questa condizione, ma io ho bisogno di una sola.
Il risultato è la seguente immagine:
Come posso controllare se un affare è stato fatto con questa condizione o no? Ho provato in questo modo, ma non funziona:
E perché organizzare la ricerca nel ciclo se c'è una cosa meravigliosa come PositionSelect?
Controlliamo solo l'esistenza della posizione sul simbolo interessante e se è vero, andiamo a bere cognac e fumare sigari... :)
PS
Da quanto ho capitoPositionGetString senzaPositionSelect non dovrebbe funzionare. Non abbiamo bisogno di conoscere i simboli di tutte le pose aperte, giusto?
Non c'è bisogno di cercare nel ciclo quando c'è una cosa meravigliosa come PositionSelect?
Basta controllare la presenza di una posizione sullo strumento che ci interessa e se risulta vera andiamo tranquillamente a bere cognac e fumare sigari... :)
PS
Da quanto ho capitoPositionGetString senzaPositionSelect non dovrebbe funzionare. Non abbiamo bisogno di conoscere i simboli di tutte le pose aperte, giusto?
Questo codice tiene conto della presenza di una posizione aperta:
if(Buy_Signal && PositionSelect(Symbol())==false) { mrequest.type = ORDER_TYPE_BUY; // ордер на покупку mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit OrderSend(mrequest,mresult); // отсылаем ордер }
Ma continua ad aprire posizioni quando la condizione Buy_Signal è soddisfatta. Quello che voglio è che prima che si verifichi Sell_Signal una posizione a Buy_Signal non si apra di nuovo. Sto cercando di implementarlo in questo modo:
Tale codice tiene conto della presenza di una posizione aperta:
Ma continua ad aprire posizioni quando la condizione Buy_Signal è soddisfatta. Ho bisogno di assicurarmi che prima che si verifichi la condizione Sell_Signal non vengano aperte altre posizioni da Buy_Signal. Sto cercando di implementarlo in questo modo:
Non lo fa.
Perché questo codice? Non assomiglia affatto a quello che intendevo (dubito che tutto sia corretto lì).
if(Buy_Signal && PositionSelect(Symbol())==false)
{
mrequest.type = ORDER_TYPE_BUY; // ордер на покупку
mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask
mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit OrderSend(mrequest,mresult); // отсылаем ордер
}
E intendevo qualcosa del genere:
Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
SL = NormalizeDouble(Ask - 500*_Point,_Digits); // Stop Loss
TP = NormalizeDouble(Ask + 1500*_Point,_Digits); // Take Profitif(Buy_Signal)
//Получен сигнал на market buy
{
if(!PositionSelect(_Symbol))
//Позиции по данному символу отсутствуют
{
mrequest.action = TRADE_ACTION_DEAL; //Установка рыночного ордера (позиция)
mrequest.type = ORDER_TYPE_BUY; //Ордер на покупку
mrequest.magic = 18072010; //ORDER_MAGIC
mrequest.symbol = _Symbol; //Инструмент
mrequest.volume = 0.1; //Объем в 0.1 лот
mrequest.price = Ask; //Цена открытия
mrequest.sl = SL; //Stop Loss
mrequest.tp = TP; //Take Profit
mrequest.deviation = 5; //Отклонение в 5 пунктов OrderSend(mrequest,mresult); //Отсылаем ордер
}
}
Questo e il codice precedente non aprono una posizione finché non viene chiusa, ma la riaprono dopo la chiusura sulla barra successiva se la condizione è soddisfatta. L'ho implementato in questo modo:
bool BuyOne = true, SellOne = true; // только один ордер. глобальные переменные
if(Buy_Signal && // покупаем если есть сигнал на покупку PositionSelect(Symbol())==false && // ордер закрыт BuyOne) // при условии на покупку ставим только один ордер { mrequest.type = ORDER_TYPE_BUY; // ордер на покупку mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit OrderSend(mrequest,mresult); // отсылаем ордер BuyOne = false; // на покупку только один ордер SellOne = true; // меняем флаг одного ордера на продажу }
Grazie! Ho preso in considerazione tutti i vostri desideri e ora tutto funziona. Ho inviato l'Expert Advisor per la pubblicazione. Posso fare altre modifiche al codice. Non c'è limite alla seduzione)))
Non ho trovato nessuna descrizione dei codici di risposta (Retcode) per la struttura dei risultati del controllo delle richieste di commercio MqlTradeCheckResult nella documentazione. Ce ne saranno?
Durante il test di Expert Advisors:
Exp_TEMA.mq5, dall'articolo: "Creazione di un Expert Advisor che fa trading su diversi simboli". , l'espressione Told[] Tnew[1]ottiene i seguenti valori:
Told[] L'espressione non può essere valutata
Tnew[1] Intervallo di array non valido.
E My_First_EA.mq5, dall'articolo: "A Step-by-Step Guide to Writing MQL5 Expert Advisors for Beginners", l'espressione
New_Time[1] ottiene il valore:Invalid array range
Cosa sono i valori Expression could not be evaluated,Invalid array range, e come influenzano i risultati degli esperti?
Told - array vuoto senza dimensione
Tnew[1] - fuori dall'array, l'array è descritto come Tnew[1], quindi i suoi elementi sono accessibili solo come Tnew[0], perché l'indice inizia a zero.
Told - array vuoto senza dimensione
Tnew[1] - fuori dall'array, l'array è descritto come Tnew[1], quindi i suoi elementi sono accessibili solo come Tnew[0], perché l'indice inizia a zero.
Per favore, ditemi come aprire un solo trade per condizione. Con il mio codice, il terminale apre diverse offerte su questa condizione, ma io ho bisogno di una sola.
Il risultato è la seguente immagine:
Come posso controllare se un affare è stato fatto con questa condizione o no? Ho provato in questo modo, ma non funziona:
Per favore, ditemi come aprire un solo trade per condizione. Con il mio codice, il terminale apre diverse offerte su questa condizione, ma io ho bisogno di una sola.
Il risultato è la seguente immagine:
Come posso controllare se un affare è stato fatto con questa condizione o no? Ho provato in questo modo, ma non funziona:
E perché organizzare la ricerca nel ciclo se c'è una cosa meravigliosa come PositionSelect?
Controlliamo solo l'esistenza della posizione sul simbolo interessante e se è vero, andiamo a bere cognac e fumare sigari... :)
PS
Da quanto ho capito PositionGetString senzaPositionSelect non dovrebbe funzionare. Non abbiamo bisogno di conoscere i simboli di tutte le pose aperte, giusto?
Non c'è bisogno di cercare nel ciclo quando c'è una cosa meravigliosa come PositionSelect?
Basta controllare la presenza di una posizione sullo strumento che ci interessa e se risulta vera andiamo tranquillamente a bere cognac e fumare sigari... :)
PS
Da quanto ho capito PositionGetString senzaPositionSelect non dovrebbe funzionare. Non abbiamo bisogno di conoscere i simboli di tutte le pose aperte, giusto?
Questo codice tiene conto della presenza di una posizione aperta:
Ma continua ad aprire posizioni quando la condizione Buy_Signal è soddisfatta. Quello che voglio è che prima che si verifichi Sell_Signal una posizione a Buy_Signal non si apra di nuovo. Sto cercando di implementarlo in questo modo:
Non va.Tale codice tiene conto della presenza di una posizione aperta:
Ma continua ad aprire posizioni quando la condizione Buy_Signal è soddisfatta. Ho bisogno di assicurarmi che prima che si verifichi la condizione Sell_Signal non vengano aperte altre posizioni da Buy_Signal. Sto cercando di implementarlo in questo modo:
Non lo fa.Perché questo codice? Non assomiglia affatto a quello che intendevo (dubito che tutto sia corretto lì).
E intendevo qualcosa del genere:
Come minimo potrebbe essere fatto in un blocco
Perché questo particolare codice? Non è nemmeno lontanamente simile a quello che intendevo (dubito che sia giusto).
E intendevo qualcosa del genere:
Come minimo tutto può essere fatto in un blocco.
Questo e il codice precedente non aprono una posizione finché non viene chiusa, ma la riaprono dopo la chiusura sulla barra successiva se la condizione è soddisfatta. L'ho implementato in questo modo:
Grazie! Ho preso in considerazione tutti i vostri desideri e ora tutto funziona. Ho inviato l'Expert Advisor per la pubblicazione. Posso fare altre modifiche al codice. Non c'è limite alla seduzione)))