Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 322

 

Você pode me dizer como fazer o indicador exibir não a corrente, mas o valor máximo das últimas barras Por barra, usei Osma como exemplo, mas ele mostra corrente no Testador de Estratégia quando o gráfico está em movimento e quando você simplesmente o coloca no gráfico, nada:

//---- 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:
Eu entendo isso! Mas como podemos programar esta variável ("spread especificado")? Claro, eu posso criar uma variável Spread e mudá-la toda vez que eu mudar o spread no testador. Digamos, Spread(TestGenerator) ou existe alguma função, ou você pode de alguma forma fazer tal função, não pode ser que você não possa! А?


Há um spread definido, quando se testa,

mas com a maioria dos CDs é variável. Se você quiser, leve isso em consideração no testador. Em geral, teste os Conselheiros Especialistas nas condições mais desfavoráveis. Isto é, com a máxima dispersão, com possíveis atrasos na abertura do pedido, etc.

 
Sepulca:


Há um spread especificado, quando se testa,

mas com a maioria dos CDs é variável. Se você quiser, leve isso em consideração no testador. Em geral, teste os Conselheiros Especialistas nas condições mais desfavoráveis. Isto é, com a máxima dispersão, com possíveis atrasos na abertura do pedido, etc.

Eu entendo e faço tudo! Só queria refletir o spread que eu estabeleci no programa, porque no testador Ask é muitas vezes distorcido, então o encontre através do Bid+spread! Ver filial MarketInfo não funciona no testador! Então você saberá o que está errado! Perguntado lá, e ninguém! Portanto, mudou-se para cá, lá respondeu, pelo que você e outros agradeceram!
 
Colegas! Por favor, ajudem-me a encaixar uma função pronta em uma EA
 

Aqui está a função

bool isFlagHistoryPos(int mn=-1) {

data/hora t;

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

int i, j=-1, k=OrdensHistóriaTotal();

para (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);

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

}

retorno(falso);

O próprio Expert Advisor está anexado

/* Descompilado por Vinin */

 
borilunad:
Sim, eu entendo e faço tudo! Só queria que o spread que estou estabelecendo fosse refletido no programa, pois o Ask é muitas vezes distorcido no testador, então o encontre através do Bid+spread! Ver filial MarketInfo não funciona no testador! Então você saberá o que está errado! Perguntado lá, e ninguém! Portanto, mudou-se para cá, lá respondeu, pelo que você e outros agradeceram!

Merda, Boris. Eu já escrevi antes. Bem, você pode imitar um spread flutuante bem no Expert Advisor. O que me impede de adicionar um número aleatório no intervalo do spread flutuante à licitação, e abri-lo com ordens de parada. E fechar por valor, não por ordens de parada. É mais complicado do que apenas estabelecer uma maior propagação estática, mas se você realmente precisa, você pode fazê-lo. Ao mesmo tempo, definir o spread mínimo no testador.

É só que... uma linha de pensamento.

 
artmedia70:

Merda, Boris. Eu já escrevi antes. Bem, faça um espalhamento flutuante simulado bem no seu EA. O que o impede de adicionar um número aleatório na faixa de propagação flutuante à licitação e abrir com ordens de parada. E fechar por valor, não por ordens de parada. É mais complicado do que apenas estabelecer uma maior propagação estática, mas se você realmente precisa, você pode fazê-lo. Ao mesmo tempo, no testador, definir o spread mínimo.

Isto é apenas ... Uma forma de pensar.

Obrigado Artem, isso é mais sensato de uma boa maneira! Eu o farei!
 

Ajude-me com o problema, por favor) Escrevi um Expert Advisor que trabalha atravessando acenando, mas quando tento testá-lo, o terminal apita e não testa nada (o código do compilador gosta dele. Como fazer pelo menos algo para mostrar?

#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:

Ajude-me com o problema, por favor) Escrevi um Expert Advisor que trabalha atravessando acenando, mas quando tento testá-lo, o terminal apita e não testa nada (o código do compilador gosta dele. Como fazer pelo menos algo para mostrar?

Você já olhou para o que escreveu?!

Algo me diz que "é aqui que reside o 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:

Ajude-me com o problema, por favor) Eu escrevi um Expert Advisor que trabalha no cruzamento acenando, mas quando eu tento testá-lo, o terminal apita e não testa nada (o código do compilador gosta. Como fazer para que ele pelo menos tenha algo para mostrar?

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

Onde ele vai tocá-lo? Sim e é suficiente verificar o mágico, manual sem mágico.


E, como já foi escrito acima, os mastros não se sobrepõem.

Razão: