Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 758 1...751752753754755756757758759760761762763764765...1178 Nuovo commento Artyom Trishkin 2014.10.30 06:25 #7571 Ozero:Passare il ";" dietro la staffa. Il programma funziona, MA a volte fallisce con l'errore 4108.Ozero.Aprire l'aiuto, vedere gli errori di runtime, e vediamo: 4108 BIGLIETTO ERRATO_INVALIDO Numero di biglietto errato.Pensa e cerca... MegaHunter 2014.10.30 06:26 #7572 Le persone di aiuto hanno bisogno di commerciare su ogni valuta con i propri ordini per distinguere e differenziare + dopo l'ordine aperto se il prezzo rotola indietro ancora più lontano potrebbe aprire un altro ordine uguale al primo.//+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double MACDOpenLevel=3; extern double MACDCloseLevel=2; extern double MATrendPeriod=26; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt=0, ticket, total; // первичные проверки данных // важно удостовериться что эксперт работает на нормальном графике и // пользователь правильно выставил внешние переменные (Lots, StopLoss, // TakeProfit, TrailingStop) // в нашем случае проверяем только TakeProfit if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit<10) { Print("TakeProfit less than 10"); return(0); // проверяем TakeProfit } // ради упрощения и ускорения кода, сохраним необходимые // данные индикаторов во временных переменных MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); total=OrdersTotal(); if(total<1) { // нет ни одного открытого ордера if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // проверяем на возможность встать в длинную позицию (BUY) if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } // проверяем на возможность встать в короткую позицию (SELL) if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } // переходим к важной части эксперта - контролю открытых позиций // 'важно правильно войти в рынок, но выйти - еще важнее...' for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // это открытая позиция? OP_BUY или OP_SELL OrderSymbol()==Symbol()) // инструмент совпадает? { if(OrderType()==OP_BUY) // открыта длинная позиция { // проверим, может уже пора закрываться? if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // закрываем позицию return(0); // выходим } // проверим - может можно/нужно уже трейлинг стоп ставить? if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop, OrderTakeProfit(),0,Green); return(0); } } } } else // иначе это короткая позиция { // проверим, может уже пора закрываться? if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // закрываем позицию return(0); // выходим } // проверим - может можно/нужно уже трейлинг стоп ставить? if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop, OrderTakeProfit(),0,Red); return(0); } } } } } } return(0); } // конец. [Archivio] FOREX - Tendenze, [ARCHIVIO]Qualsiasi domanda da principiante, Questo è tutto. Basta... Alexey Kravchenko 2014.10.30 06:33 #7573 Ciao a tutti!Ho appena notato che NormalizeDouble funziona in modo strano.Cioè, l'Expert Advisor funziona bene e non ha errori, ma i log nello Strategy Tester sono molto strani.Vi spiegherò.Calcolo il profitto utilizzando questa funzione. Faccio quello che penso dovrebbe fare NormalizeDouble(Profit,Digits);Poi stampo(" profitto=",DoubleToStrMorePrecision(Profit,8));Come risultato, il log mostra il seguente: "profit=0.88881912". Sembra essere 0,88881000, giusto?O forse sono stupido e faccio qualcosa di sbagliato? [Qualsiasi domanda da principiante, Tutte le domande dei Chiedete! Artyom Trishkin 2014.10.30 06:36 #7574 goodearth:Ciao a tutti!Ho appena notato che NormalizeDouble funziona in modo strano.Cioè, l'Expert Advisor funziona bene e non ha errori, ma i log nello Strategy Tester sono molto strani.Vi spiegherò.Calcolo il profitto utilizzando questa funzione. Faccio quello che penso dovrebbe fare NormalizeDouble(Profit,Digits);Poi stampo(" profitto=",DoubleToStrMorePrecision(Profit,8));Come risultato, il log mostra il seguente: "profit=0.88881912". Sembra essere 0,88881000, giusto?O forse sono stupido e faccio qualcosa di sbagliato? Avete un valore di profitto negli ordini commerciali? Alexey Kravchenko 2014.10.30 06:43 #7575 artmedia70: Il vostro valore di profitto partecipa agli ordini commerciali?Sì, certo. E nessun errore :-). Ecco perché sono rimasto sorpreso.Ho la Build 735.Il trading è sulla demo.Aaaaaaaaah ho capito! Ho dimenticato l'operazione di assegnazione:-). "Profit=NormalizeDouble(Profit,Digits)".Ma ancora non capisco perché l'EA non mostra errori ))Forse il server arrotonda automaticamente.....Pensavo che NormalizeDouble fosse una procedura, non una funzione :-). Sistema di trading ben Dalla teoria alla pratica [Qualsiasi domanda da principiante, Boris 2014.10.30 07:17 #7576 Ozero: Mettere ";" dietro una parentesi. Il programma funziona, MA ogni tanto fallisce con l'errore 4108.Ozero.Infatti, deve essere cancellato! Artyom Trishkin 2014.10.30 07:35 #7577 borilunad: In effetti, dovrebbe essere cancellato!Boris, è meglio che gli mostri direttamente il codice, perché avevo troppo sonno per ricordare... ;)ResetLastError(); if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("Чё-та не закрылася позиция. Фигня вот такая происходит: "+GetLastError()); Boris 2014.10.30 08:05 #7578 artmedia70: Boris, è meglio che gli mostri direttamente il codice, perché avevo troppo sonno per ricordare... ;)Non volevo abusare del tuo copyright! ;)E seriamente, qualcosa non si è attaccato! Ma lo proverò ora!ResetLastError(); if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("");E ora ha funzionato! Che strano! visnu 2014.10.30 12:35 #7579 CiaoPer favore, datemi una soluzione.C'è un EA che compila senza errori con la 500esima build dell'editor.Ma nella nuova versione genera errori. Vedo questi errori:bool TP?=true; // ошибка '?' - semicolon expected E questo due volte.if(TP?) // ')' - unexpected token // ')' - ':' colon sign expected Ho cercato nel manuale della nuova versione e di quella vecchia, ma non ho trovato nulla sul punto interrogativo.Domanda: cosa significano queste operazioni e come correggerle per rendere il codice compilabile normalmente?Grazie in anticipo. Imparare e scrivere insieme Indicatori Elite :) Errori, bug, domande [Deleted] 2014.10.30 15:26 #7580 Ciao, potresti dirmi perché a volte ho un operatore ifle che non funziona. Ecco un esempio: double H3=ObjectGet ("H3 line", OBJPROP_PRICE1); int start() { double price = Bid; if (price==H3) { Alert ("Урааааа ", Symbol()); } return(0); }Dove: H3 è il valore del prezzo del livello price è il prezzo corrente Il risultato è che il prezzo raggiunge questo livello (a volte si ferma anche ad esso), ma Alert non si attiva. Puoi dirmi qual è l'errore? NFA vieta il bloccaggio Tutte le domande dei Aiuto per la codifica 1...751752753754755756757758759760761762763764765...1178 Nuovo commento
Passare il ";" dietro la staffa.
Il programma funziona, MA a volte fallisce con l'errore 4108.
Ozero.
Aprire l'aiuto, vedere gli errori di runtime, e vediamo:
4108
BIGLIETTO ERRATO_INVALIDO
Numero di biglietto errato.
Pensa e cerca...
Le persone di aiuto hanno bisogno di commerciare su ogni valuta con i propri ordini per distinguere e differenziare + dopo l'ordine aperto se il prezzo rotola indietro ancora più lontano potrebbe aprire un altro ordine uguale al primo.
Ciao a tutti!
Ho appena notato che NormalizeDouble funziona in modo strano.
Cioè, l'Expert Advisor funziona bene e non ha errori, ma i log nello Strategy Tester sono molto strani.
Vi spiegherò.
Calcolo il profitto utilizzando questa funzione. Faccio quello che penso dovrebbe fare NormalizeDouble(Profit,Digits);
Poi stampo(" profitto=",DoubleToStrMorePrecision(Profit,8));
Come risultato, il log mostra il seguente: "profit=0.88881912". Sembra essere 0,88881000, giusto?
O forse sono stupido e faccio qualcosa di sbagliato?
Ciao a tutti!
Ho appena notato che NormalizeDouble funziona in modo strano.
Cioè, l'Expert Advisor funziona bene e non ha errori, ma i log nello Strategy Tester sono molto strani.
Vi spiegherò.
Calcolo il profitto utilizzando questa funzione. Faccio quello che penso dovrebbe fare NormalizeDouble(Profit,Digits);
Poi stampo(" profitto=",DoubleToStrMorePrecision(Profit,8));
Come risultato, il log mostra il seguente: "profit=0.88881912". Sembra essere 0,88881000, giusto?
O forse sono stupido e faccio qualcosa di sbagliato?
Il vostro valore di profitto partecipa agli ordini commerciali?
Sì, certo. E nessun errore :-). Ecco perché sono rimasto sorpreso.
Ho la Build 735.
Il trading è sulla demo.
Aaaaaaaaah ho capito! Ho dimenticato l'operazione di assegnazione:-). "Profit=NormalizeDouble(Profit,Digits)".
Ma ancora non capisco perché l'EA non mostra errori ))
Forse il server arrotonda automaticamente.....
Pensavo che NormalizeDouble fosse una procedura, non una funzione :-).
Mettere ";" dietro una parentesi.
Il programma funziona, MA ogni tanto fallisce con l'errore 4108.
Ozero.
Infatti, deve essere cancellato!
In effetti, dovrebbe essere cancellato!
Boris, è meglio che gli mostri direttamente il codice, perché avevo troppo sonno per ricordare... ;)
Boris, è meglio che gli mostri direttamente il codice, perché avevo troppo sonno per ricordare... ;)
Non volevo abusare del tuo copyright! ;)
E seriamente, qualcosa non si è attaccato! Ma lo proverò ora!
E ora ha funzionato! Che strano!
Ciao, potresti dirmi perché a volte ho un operatore ifle che non funziona.
Ecco un esempio:
Dove:
H3 è il valore del prezzo del livello
price è il prezzo corrente
Il risultato è che il prezzo raggiunge questo livello (a volte si ferma anche ad esso), ma Alert non si attiva.
Puoi dirmi qual è l'errore?