[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 232

 

Dmido писал(а) >>

Buona giornata)


Torno da voi con una domanda. Ho evitato per molto tempo a causa della mia mancanza di comprensione degli ordini pendenti negli EA, ma alla fine mi sono bloccato. Non capisco come impostare il prezzo nell'ordine in sospeso. Cosa dovrei aggiungere al posto di BID e ASK? Posso usare qualsiasi variabile calcolata prima? Allora, come dovrei impostare questo prezzo in modo che passi più tardi, quando si fa un ordine? Ricevo un sacco di errori che dicono che non esiste un tale prezzo e così via.....


Se non ti dispiace, puoi spiegare la tua risposta in codice... Ho cercato così tanto, ma dice così di traverso...(((

Nella qualità dei valori Ask e Bid sull'idea dovrebbe agire i valori attuali di Ask e Bid, o variabili calcolate in precedenza.

C'è una particolarità qui: si possono prendere questi valori come reali solo per gli ordini di acquisto e vendita.


La cosa migliore è fare l'apertura di tutti gli ordini sotto forma di almeno 6 procedure, cioè OrderSendBuy, OrderSendSell, OrderSendLimitBuy, OrderSendLimitSell, OrderSendStopBuy e OrderSendStopSell.


PS

Va notato che gli ordini limite sono aperti al miglior prezzo (con un rientro dal prezzo corrente di un certo numero di punti), e gli ordini stop sono piazzati nella direzione opposta sopra o sotto il prezzo corrente.


Esempio di un codice di apertura del mercato:

//Procedure OrderSendBuy
void OrderSendBuy(string WorkSymbol, double LotsSize=0, int Slippage=3,int SizeSL=0, int SizeTP=100,
string Text=NULL, int MN=0, datetime Expiration=0, color OrdrtColor=CLR_NONE)
{
//----------------------------------------------------------------------------//
// Служебные переменные
double RealAsk, RealBid; //Текущие Ask и Bid инструмента
double SymbolPoint; //Размер пункта текущего инструмента
double SL, TP; // StopLoss и TakeProfit будущей позиции

int TicketNew; //Тикер новой позиции (в случае удачи, иначе -1)
//----------------------------------------------------------------------------//
//Зашита от дурака
  if( LotsSize<MarketInfo( WorkSymbol,MODE_MINLOT)){ LotsSize = MarketInfo( WorkSymbol,MODE_MINLOT);}

//Расчет параметров для новой позиции
SymbolPoint = MarketInfo( WorkSymbol,MODE_POINT); //Определяем размер пункта
RealAsk = MarketInfo( WorkSymbol,MODE_ASK); //Определяем Ask
RealBid = MarketInfo( WorkSymbol,MODE_BID); //Определяем Bid

if( SizeTP>0){ TP = RealAsk+ SizeTP* SymbolPoint;}else{ TP = RealAsk+100* SymbolPoint;}
if( SizeSL>0){ SL = RealBid- SizeSL* SymbolPoint;}else{ SL = 0;}
//Попытка открыть позицию с рынка
TicketNew = OrderSend( WorkSymbol,OP_BUY, LotsSize, RealAsk, Slippage, SL, TP, Text, MN, Expiration, OrdrtColor);
//Проверка ошибок возникших при открытии новой позиции
if( TicketNew==-1)
//При открытии произошла ошибка
{
Print("Попытка открыть Market-Buy позицию по паре ", WorkSymbol," окончилась неудачно. Код ошибки #",GetLastError())
;}
else
//Позиция успешно установлена
{
Print("Успешно создана позиция Market-Buy по паре ", WorkSymbol," Тикер новой позиции #", TicketNow);
Alert("Open market-Buy, ticket ", TicketNew," Open price ", RealAsk," Profit ", TP," SL ", SL);
}
//----------------------------------------------------------------------------//
}


 

Codice di esempio per impostare un ordine pendente:

//Procedure OrderSendLimitBuy
void OrderSendLimitBuy(string WorkSymbol, double LotsSize=0, int Slippage=3,int LimitStep=50,int SizeSL=0, int SizeTP=100,
string Text=NULL, int MN=0, datetime Expiration=0, color OrdrtColor=CLR_NONE)
{
//----------------------------------------------------------------------------//
// Служебные переменные
double RealAsk, RealBid; //Текущие Ask и Bid инструмента
double OpenPrice; //Цена на которую будет установлен отложник

double SymbolPoint; //Размер пункта текущего инструмента
double SL, TP; // StopLoss и TakeProfit будущей позиции

int TicketNew; //Тикер новой позиции (в случае удачи, иначе -1)
//----------------------------------------------------------------------------//
//Зашита от дурака
  if( LotsSize<MarketInfo( WorkSymbol,MODE_MINLOT)){ LotsSize = MarketInfo( WorkSymbol,MODE_MINLOT);}

//Расчет параметров для новой позиции
SymbolPoint = MarketInfo( WorkSymbol,MODE_POINT); //Определяем размер пункта
RealAsk = MarketInfo( WorkSymbol,MODE_ASK); //Определяем Ask
RealBid = MarketInfo( WorkSymbol,MODE_BID); //Определяем Bid

OpenPrice = RealAsk- LimitStep* SymbolPoint; //Цена на которую будет установлен отложник

if( SizeTP>0){ TP = OpenPrice+ SizeTP* SymbolPoint;}else{ TP = OpenPrice+100* SymbolPoint;}
if( SizeSL>0){ SL = RealBid-( SizeSL+ LimitStep)* SymbolPoint;}else{ SL = 0;}
//Попытка открыть позицию с рынка
TicketNew = OrderSend( WorkSymbol,OP_BUYLIMIT, LotsSize, OpenPrice, Slippage, SL, TP, Text, MN, Expiration, OrdrtColor);
//Проверка ошибок возникших при открытии новой позиции
if( TicketNew==-1)
//При открытии произошла ошибка
{
Print("Попытка создать Limit-Buy по паре ", WorkSymbol," окончилась неудачно. Код ошибки #",GetLastError())
;}
else
//Позиция успешно установлена
{
Print("Успешно создан ордер Limit-Buy по паре ", WorkSymbol," Тикер ордера #", TicketNow);
Alert("Create Limit-Buy, ticket ", TicketNew," Open price ", OpenPrice," Profit ", TP," SL ", SL);
}
//----------------------------------------------------------------------------//
}
 

Salve.

Sto testando un EA.

Periodo Giorno (D1) 2008.09.01 00:00 - 2009.08.31 00:00 (2008.09.01 - 2009.09.01)
Modello Tutti i tick (il metodo più accurato basato su tutti i più piccoli timeframe disponibili)
Bar nella storia 1259 Zecche modellate 8769661 Qualità della modellazione n/a
Errori di mancata corrispondenza dei grafici 225

Sto ottenendo errori di corrispondenza. C'è un modo per evitarli? Non capisco se si tratta di un numero grande o piccolo di errori. La scala è prevalentemente verde e verde scuro, ma solo circa il 20% piena. E la qualità della simulazione è n/a - è un problema?

Forse non dovrei nemmeno prestare attenzione, è solo che non capisco ...

Grazie in anticipo.

 
RedFish >> :

Salve.

Sto testando un EA.

Periodo Giorno (D1) 2008.09.01 00:00 - 2009.08.31 00:00 (2008.09.01 - 2009.09.01)
Modello Tutti i tick (il metodo più accurato basato su tutti i più piccoli timeframe disponibili)
Bar nella storia 1259 Zecche modellate 8769661 Qualità della modellazione n/a
Errori di mancata corrispondenza dei grafici 225

Sto ottenendo errori di corrispondenza. C'è un modo per evitarli? Non capisco se si tratta di un numero grande o piccolo di errori. La scala è prevalentemente verde e verde scuro, ma solo circa il 20% piena. E la qualità della simulazione è n/a - è un problema?

Forse non dovrei nemmeno prestare attenzione, è solo che non capisco ...

Grazie in anticipo.

Non so, personalmente non mi preoccupo mai di queste cose (dato che quasi sempre provo strategie senza visualizzazione).


Ecco cosa ho ottenuto su Jew D1 con un periodo di prova simile

Tentativo #1: barre nella storia - 1302 tick simulati - 4313293 Qualità della simulazione - 50.00%

Tentativo #2: barre nella storia - 1303 Tick modellati - 4323442 Qualità di modellazione - 50.00%
Errori di corrispondenza dei grafici - 0.

 
Interesting писал(а) >>

Non so, personalmente non mi preoccupo mai di queste cose (dato che provo quasi sempre strategie senza visualizzazione).

Ecco cosa ho ottenuto su Jew D1 con un periodo di prova simile

Tentativo #1: barre nella storia - 1302 tick simulati - 4313293 Qualità della simulazione - 50.00%

Prova #2: Storia: 1303 barre - 1303 tick simulati - 4323442 Qualità di modellazione - 50.00%
Errore di mancata corrispondenza del grafico - 0.

Grazie.

Penso che ora MT riempia automaticamente le ultime 512 barre e riempia il resto .... Non so come dirlo esattamente. Il mio Expert Advisor è un trend e la distanza è importante per me. 512 barre non sono troppe.

Per quanto riguarda gli altri simboli, possono essere scaricati da un sito separato e scaricati in seguito?

Vi ringrazio.

 

Buon pomeriggio, cari amici.

Sono stato muto ultimamente, forse è il tempo.

Potete dirmi per favore come dichiarare un array unidimensionale (in un indicatore), se il numero di elementi dell'array è impostato da una variabile esterna.

Grazie.

 
RedFish >> :

Salve.

Sto testando un EA.

PeriodoGiorno (D1) 2008.09.01 00:00 - 2009.08.31 00:00 (2008.09.01 - 2009.09.01)
ModelloTutti i tick (il metodo più accurato basato su tutti i più piccoli timeframe disponibili)
Bar nella storia1259Zecche modellate8769661Qualità della modellazionen/a
Errori di mancata corrispondenza dei grafici225

Sto ottenendo errori di corrispondenza. C'è un modo per evitarli? Non capisco se si tratta di un numero grande o piccolo di errori. La scala è prevalentemente verde e verde scuro, ma solo circa il 20% piena. E la qualità della simulazione è n/a - è un problema?

Forse non dovrei nemmeno prestare attenzione, è solo che non capisco ...

Grazie in anticipo.

Il mio sotto IMHO, ma essendo virgolettato - per favore correggetemi se mi sbaglio:

Il punto è che Close 59th minute, Close 45th minute su M15, Close 30th minute su M30 e Close su H1 possono NON coincidere.

Per coincidere, è necessario uccidere la propria storia, scaricando la storia dal server delle quotazioni per un periodo più piccolo

e ricalcolare tutti i timeframe utilizzando la cronologia scaricata.

In questo caso, il Close reale su diversi timeframe può anche non coincidere.

In altre parole, dovresti prendere il timeframe più piccolo e leggere i valori del timeframe più grande con la tua MANO.

 
alderru >> :

Buon pomeriggio, cari amici.

Sono stato muto ultimamente, forse è il tempo.

Potreste dirmi come dichiarare un array unidimensionale (in un indicatore), se il numero di elementi dell'array è impostato da una variabile esterna.

Grazie.

int y[];

extern int blah-blah = 100;

init() {

ArrayResize(y, bla bla);

}

 
jartmailru писал(а) >>

Il mio sotto IMHO, ma essendo citazioni, per favore correggetemi se mi sbaglio:

Il fatto è che Close 59° minuto, Close 45° su M15, Close 30° su M30 e Close su H1 possono NON corrispondere.

Per coincidere, è necessario uccidere la propria storia, scaricando la storia dal server delle citazioni per un periodo più piccolo

e ricalcolare tutti i timeframe utilizzando la cronologia scaricata.

In questo caso, il Close reale su diversi timeframe può anche non coincidere.

Cioè, in un buon modo, si dovrebbe prendere il timeframe più piccolo e leggere i valori del timeframe più grande.

О! Mani!!!

Grazie per la risposta. Ma a giudicare dalla prima parte, capisco che gli errori non sono critici per me. Grazie mille per aver spiegato il meccanismo di questi errori.

 
Signori il problema nel codice può aiutare!
for ( shift = CountBars; shift>=0; shift--) 
{ 
         cci1 = iCCI(NULL, 0, kCCI, PRICE_TYPICAL, shift-1);
         cci2 = iCCI(NULL, 0, kCCI, PRICE_TYPICAL, shift);  

         if ( cci1>100) // (b4plusdi>b4minusdi && nowplusdi<nowminusdi)
         {
         val1[ shift]=Low[ shift]-5*Point;
         if ( flagval2==0) { Alert("не забудь отправить письмо о БАЙ"); flagval2=1; flagval1=0;}
         }
         if ( cci1<-100) //(b4plusdi<b4minusdi && nowplusdi>nowminusdi) 
         {
         val2[ shift]=High[ shift]+5*Point;
         if ( flagval1==0) { Alert("не забудь отправить письмо о СЕЛЛ"); flagval2=0; flagval1=1;}
         }
   }
   return(0);
}

in cima:

int flagval1=0;
int flagval2=0;

Sto lottando specificamente con queste bandiere, qualcuno può dare una nuova occhiata?

-----------------

e c'è anche un problema con il codice EA:

//---------------------------------------------------------------- 5.1 
   cci1 = iCCI(NULL, 0, kCCI, PRICE_TYPICAL, 1);

   if ( New_Bar==true && cci1>100 && flagval2==1)                // && MA_3_t==0   && wayDOWN==true
     {                                            
         Opn_B=true; New_Bar=false; Cls_S=true;                                  
         flagval1=1;
         flagval2=0;
     }
     
   if ( New_Bar==true && cci1<-100 && flagval1==1)                 // && MA_4_t==0  && wayUP==true
     {                                                   
         Opn_S=true; New_Bar=false; Cls_B=true;
         flagval2=1;
         flagval1=0;
     }
//--------------------------------------------------------------- 6 --

non è commercio! Forse qualcuno lo guarderà di nuovo.

deciso di stupido non appena il 100 (-100) va al commercio!

Attacco EA!

File:
stoch_cros.mq4  17 kb