Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 322

 

Puoi dirmi come fare in modo che l'indicatore mostri non la corrente ma il valore massimo delle ultime Per barre, ho usato Osma come esempio, ma mostra la corrente nello Strategy Tester quando il grafico è in movimento e quando lo metti solo sul grafico, niente:

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property   indicator_color1  Silver
#property   indicator_width1  2
//---- indicator parameters

extern int Per=12;
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double     OsmaBuffer1[];
double     OsmaBuffer[];
double     MacdBuffer[];
double     SignalBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 2 additional buffers are used for counting.
   IndicatorBuffers(4);
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexDrawBegin(0,SignalSMA);
   IndicatorDigits(Digits+2);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,OsmaBuffer1);
   SetIndexBuffer(1,OsmaBuffer);
   SetIndexBuffer(2,MacdBuffer);
   SetIndexBuffer(3,SignalBuffer);
   
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
int start()
  {
   
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st additional buffer
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd additional buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- main loop
   for(i=0; i<limit; i++)
      OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i];
//---- done
   for(i=0; i<limit; i++)
    {
     for(int b=0; b<Per; b++)
      {
       OsmaBuffer1[i] =OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,b)];
      }
    } 
  return(0);
  }
Всё разобрался, перемудрил просто))), достаточно этого:
for(i=0; i<limit; i++)
    {
     OsmaBuffer1[i] = OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,i)];
    } 
 
borilunad:
Lo capisco! Ma come possiamo programmare questa variabile ("spread specificato")? Certo, posso creare una variabile Spread e cambiarla ogni volta che cambio lo spread nel tester. Diciamo, Spread(TestGenerator) o c'è qualche funzione, o si può in qualche modo fare una tale funzione, non può essere che non si può! А?


C'è uno spread stabilito, quando si fanno i test,

ma con la maggior parte dei DC è variabile. Se volete, tenetene conto nel tester. In generale, testate gli Expert Advisors nelle condizioni più sfavorevoli. Cioè con spread massimo, con possibili ritardi nell'apertura degli ordini, ecc.

 
Sepulca:


C'è uno spread specificato, quando si fanno i test,

ma con la maggior parte dei DC è variabile. Se volete, tenetene conto nel tester. In generale, testate gli Expert Advisors nelle condizioni più sfavorevoli. Cioè con spread massimo, con possibili ritardi nell'apertura degli ordini, ecc.

Capisco e faccio tutto! Volevo solo riflettere lo spread che ho impostato nel prog, perché nel tester Ask è spesso distorto, quindi trovarlo tramite Bid+spread! Vedere il ramo MarketInfo non funziona nel tester! Allora saprai cosa c'è che non va! Chiesto lì, e nessuno! Quindi si è spostato qui, ci ha risposto, per il quale voi e gli altri vi ringrazio!
 
Colleghi, per favore aiutatemi a inserire una funzione già pronta in un EA
 

Ecco la funzione

bool isFlagHistoryPos(int mn=-1) {

datetime t;

int gd = MarketInfo(Symbol(),MODE_DIGITS);

int i, j=-1, k=OrdersHistoryTotal();

per (i=0; i<k; i++) {

se(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

se (OrderSymbol()==Symbol()) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

se (mn<0 || OrderMagicNumber()==mn) {

se (t<OrderCloseTime()) {

t=OrderCloseTime();

j=i;

}

}

}

}

}

}

if(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY)) {

double ocp=NormalizeDouble(OrderClosePrice(),gd);

double otp=NormalizeDouble(OrderTakeProfit(),gd);

se(MathAbs(ocp-otp)/Point<=TPpoint) return(true);

}

return(false);

L'Expert Advisor stesso è allegato

/* Decompilato da Vinin */

 
borilunad:
Sì, capisco e faccio tutto! Volevo solo che lo spread che sto impostando si riflettesse nel prog, dato che l'Ask è spesso distorto nel tester, quindi trovarlo tramite Bid+spread! Vedere il ramo MarketInfo non funziona nel tester! Allora saprai cosa c'è che non va! Chiesto lì, e nessuno! Quindi si è spostato qui, ci ha risposto, per il quale voi e gli altri vi ringrazio!

Merda, Boris. Ho già scritto prima. Bene, potete imitare uno spread fluttuante direttamente nell'Expert Advisor. Cosa mi impedisce di aggiungere all'offerta un numero casuale nell'intervallo dello spread fluttuante e di aprirlo con ordini stop. E chiudere per valore, non per ordini di stop. È più complicato che impostare uno spread statico più grande, ma se ne hai davvero bisogno, puoi farlo. Allo stesso tempo impostate lo spread minimo nel tester.

È solo che... una linea di pensiero.

 
artmedia70:

Merda, Boris. Ho già scritto prima. Bene, fai una simulazione di spread fluttuante direttamente nel tuo EA. Cosa ti impedisce di aggiungere un numero casuale nell'intervallo di spread fluttuante all'offerta e di aprire con ordini stop. E chiudere per valore, non per ordini di stop. È più complicato che impostare uno spread statico più grande, ma se ne hai davvero bisogno, puoi farlo. Allo stesso tempo, nel tester, impostare lo spread minimo.

Questo è solo ... Un modo di pensare.

Grazie Artem, è più saggio in senso buono! Lo farò!
 

Aiuto con il problema, per favore) Ho scritto un Expert Advisor che funziona con l'incrocio delle onde, ma quando provo a testarlo, il terminale emette un bip e non prova nulla (il codice del compilatore piace. Come fare almeno qualcosa da mostrare?

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Red
//---- indicator parameters
extern int RPeriod=13;
extern int RPrice=PRICE_CLOSE;
extern int RMethod=MODE_EMA;
//для желтой
extern int YPeriod=30;
extern int YPrice=PRICE_CLOSE;
extern int YMethod=MODE_EMA;
extern int Magic=17051994;
//профит и лось
extern int TakeProfit=150;
extern int StopLoss=30;
extern double lot=0.1;
double movingred,movingellow,SL,TP,movingred2,movingellow2;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
int kolpos=0,pos;  
     movingred=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingellow=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingred2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
     movingellow2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
         
        for(pos=0;pos <OrdersTotal();pos++)//считаю ордера чтобы советник не трогал в ручную выставленные ордера
        {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
            {
            kolpos++;
            }
        }
        if (kolpos==0)
         {
              //условвие для покупок продаж
              if(movingred2>movingellow2 && movingred<movingellow && Volume[0]<5)//продаем 
                  {
                    OrderSend(Symbol(),OP_SELL,lot,Bid,10,Bid+StopLoss*Point,Bid-TakeProfit*Point,NULL,Magic,0,Green);
                  }
              if(movingred2<movingellow2 && movingred>movingellow && Volume[0]<5)//покупаем
                  {
                    OrderSend(Symbol(),OP_BUY,lot,Ask,10,Ask-StopLoss*Point,Ask-TakeProfit*Point,NULL,Magic,0,Red);
                  }
          }
   return(0);
  }
 
LBatters:

Aiuto con il problema, per favore) Ho scritto un EA che funziona con l'incrocio delle onde, ma quando provo a testarlo, il terminale emette un bip e non testa nulla (il codice del compilatore piace. Come fare almeno qualcosa da mostrare?

Guardi mai quello che hai scritto?!

Qualcosa mi dice che "è qui che si trova il problema":

     movingred=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingellow=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingred2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
     movingellow2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
 
LBatters:

Aiuto con il problema, per favore) Ho scritto un Expert Advisor che funziona sull'attraversamento delle onde, ma quando provo a testarlo, il terminale emette un bip e non prova nulla (codice del compilatore piace. Come fare in modo che almeno qualcosa da mostrare?

//считаю ордера чтобы советник не трогал в ручную выставленные ордера

Dove lo toccherà? Sì ed è sufficiente controllare il mago, manuale senza mago.


E, come scritto sopra, i mash non si sovrappongono...