Como codificar? - página 182

 

...

Não é um erro de código

Vá até Ferramentas->Centro de História e então escolha e baixe dados de 1 minuto do símbolo que você quer testar (tudo que você precisa para 90% de precisão é 1 minuto de dados, sem necessidade de baixar o resto)

Badguy:
Olá Codificadores

Ainda estou aprendendo meus primeiros passos no MQL-Code.

qual é a razão quando tenho a mensagem seguinte na revista:

Testgenerator:

erro de dados incomparável ( limite de volume 159 em 2009.05.06 19 15 excedido )

onde devo procurar no código?

Obrigado
 
abundance:
Meu amigo e eu estamos trabalhando em um EA. Em algum momento ele (o EA) precisa ler & recuperar o preço em uma determinada hora, digamos, 17:00 EST... etc.

Qualquer idoso pode aconselhar como fazer isso, em vez de contar as barras de preço para trás? Talvez já exista uma função escrita para isso. Por gentileza, ajude. Obrigado a todos e que Deus os abençoe!

B rgds/abundância

iBarShift(...) ajuda a encontrar o número de barras em sua tabela, depois use Fechar ou Abrir.

 
Roger09:
iBarShift(...) ajuda a encontrar o número de barras em sua tabela, depois use Fechar ou Abrir.

Obrigado Roger. Isso foi útil. E desculpe por não ter tornado tudo mais claro. Precisamos dos dois preços Bid & Ask. Como podemos obtê-los? Desculpe se é uma pergunta idiota.

B rgds/abundância

 

Erro de dados

Oi mladen

obrigado por sua resposta rápida.

Acho que não é um problema dos tickdata, porque quando eu testo com outro EA funciona bem.

Acho que é um problema com o Custom-Indicator.

Eu vou construir no seguimento indi: AllAverages_v2.3

duplo ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,0);

agora tenho a seguinte mensagem: número tampão de índice inválido na função iCustom

Como definir este iCustom corretamente?

Olá, senhor, encontrei o problema.

Eu esqueci um parâmetro: Cor

a definição correta:

duplo ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,ALL_AVERA_COLOR,0);

mladen:
Não é um erro no código Ir para Ferramentas->Centro de História e depois escolher e baixar 1 minuto de dados do símbolo que você quer testar (tudo o que você precisa para 90% de precisão é 1 minuto de dados, sem necessidade de baixar o resto)
Arquivos anexados:
 
abundance:
Obrigado Roger. Isso foi útil. E desculpe por não ter deixado isso mais claro. Precisamos de ambos os preços Bid & Ask. Como podemos obtê-los? Desculpe se é uma pergunta boba B rgds/abundance

Todos os preços nos gráficos são Licitações. Ask=Bid+MarketInfo(Symbol(),MODE_SPREAD)*Ponto;

 

Restrições ao comércio

Então comecei a escrever uma EA básica com um desses construtores de EA geradores de modelos. Pareço ter conseguido a premissa do modelo EA, mas preciso de uma maneira de fazer com que o EA entre no máximo em uma profissão. Neste momento, ele continua gerando negócios e faz com que o sorteio seja redículo. Aqui está o código do lote de comércio:

//Check position

bool IsTrade = Falso;

para (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = Verdadeiro;

if(OrderType() == OP_BUY) {

//Close

//+------------------------------------------------------------------+

//| Início do Sinal (Compra de Saída) |

//+------------------------------------------------------------------+

if (CloseBuy1_1 >= CloseBuy1_2) Ordem = SIGNAL_CLOSEBUY;

//+------------------------------------------------------------------+

//| Fim do sinal (Compra de Saída) |

//+------------------------------------------------------------------+

if (Order === SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

se (!EachTickMode) BarCount = Bars;

IsTrade = Falso;

continuar;

}

// Parada de trilha

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Ponto * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

se (!EachTickMode) BarCount = Bars;

continuar;

}

}

}

{} else {

//Close

Se alguém pudesse ajudar, seria muito apreciado.

 
Styex:
Então comecei a escrever uma EA básica com um desses construtores de EA geradores de modelos. Pareço ter conseguido a premissa do modelo EA, mas preciso de uma maneira de fazer com que o EA entre no máximo em uma profissão. Neste momento, ele continua gerando negócios e faz com que o sorteio seja redículo. Se alguém pudesse ajudar, seria muito apreciado.
if (OrdersTotal() == 0)

{

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

//+------------------------------------------------------------------+

//| Signal Begin(Exit Buy) |

//+------------------------------------------------------------------+

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

//+------------------------------------------------------------------+

//| Signal End(Exit Buy) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

}
 

Obrigado OnTheRoad

Encontrei esta EA, não entendo parte dela.

bool get_signal()

{

bool enable_trade = falso;

int trend_up = 0;

int trend_down = 0;

int i;

ArrayInitialize( TradeSign, false );

if( Bars >= 100 ){

for( i = 0 ; i < DEF_MA_NUM ; i++ ){

Buf_MA[0][ i ] = calc_SMA( PERÍODO_M30, MA_prm_1, i );

Buf_MA[1][ i ] = calc_SMA( PERÍODO_M30, MA_prm_2, i );

Buf_MA[2][ i ] = calc_SMA( PERÍODO_M30, MA_prm_3, i );

Buf_MA[3][ i ] = calc_SMA( PERÍODO_M30, MA_prm_4, i );

Buf_MA[4][ i ] = calc_SMA( PERÍODO_M30, MA_prm_5, i );

}

duplo vRSI = iRSI( Symbol(), PERÍODO_M5, RSI_period5, PRICE_CLOSE, 0 );

duplo vRSI2 = iRSI( Symbol(), PERÍODO_M1, RSI_period1, PRICE_CLOSE, 0 );

for( i = 0 ; i < DEF_MA_TYP ; i++ ){

if((Buf_MA[2] < Buf_MA[1]) && (Buf_MA[1] < Buf_MA[0])){

trend_up+++;

}

}

if((trend_up > 3) && (vRSI <= RSI_lower) && (vRSI2 <= RSI_lower)){

TradeSign[SIG_Buy] = verdadeiro;

enable_trade = verdadeiro;

}

for( i = 0 ; i < DEF_MA_TYP ; i++ ){

if((Buf_MA[2] > Buf_MA[1]) && (Buf_MA[1] > Buf_MA[0])){

trend_down+++;

}

}

if((trend_down > 3) && (vRSI >= RSI_upper) && (vRSI2 >= RSI_upper)){

TradeSign[SIG_Sell] = verdadeiro;

enable_trade = verdadeiro;

}

}

return(enable_trade);

}

duplo calc_SMA( int timeframe, int period, int offset )

{

vMA duplo = 0;

soma dupla=0;

int i;

for( i = 0; i < período; i++ ){

soma += iClose( Símbolo(), prazo, i + offset );

}

vMA = soma / período;

retorno(vMA);

}

há uma parte em que "trendup>3", isto é calculado a partir da matriz? Como funciona um array, então pode dar "trendup>3" ? Isto é para conhecer a média a partir de uma única linha (é provável que essa linha suba ou desça)? Eu não entendo como funciona.
Arquivos anexados:
 

Como reiniciar especialistas quando se atinge o lucro alvo? Estou usando a estratégia de martingale, mas ela não abre lotes em sequência...

exemplo: lotes 0,1, 0,2, 0,4, 0,8, 1,6

lotes abertos: 0,1, 0,2, 0,4 -> obter lucro nos lotes 0,4 mas os próximos lotes são 0,8, 0,1, 0,2, 0,4...

qualquer um pode ajudar...???

int T=0;

for(int i=0;i<OrdersTotal();i++) {

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderComment()==Name_ExpertS)

{ T++;

if(OrderType()==OP_BUY) s=1;

if(OrderType()==OP_SELL) s=2;

Last=OrderOpenPrice();

}}

if (Lots<0.1) Lots=0.1;

for (int j=0;j<T;j++)

{

Lots=LotsUP[j];

}
 

Alto/baixo com critérios

Estou tentando codificar um indicador que procura por coisas específicas antes de afirmar que uma vela é o verdadeiro alto ou o verdadeiro baixo. Este é basicamente o critério (anexei um gráfico para ajudar a explicar):

1. Procure Fechar que é mais baixo que todos os 20 fecha antes (a segunda seta é este ponto), depois (2) 12 barras depois o fechamento deve ser mais alto que os 12 fecha antes (a terceira seta). Esta tendência para cima continuará até (3) que haja um fechamento que seja mais baixo que as 7 fecham antes (a quarta flecha).

Tenho tentado usar a função iLowest sem muito sucesso. Acho que minha melhor aposta é usar uma matriz, mas meu conhecimento de matrizes é limitado.

Alguma idéia ou exemplo de como usar o ArrayMinimum e o ArrayMaximum? Ou se existe uma maneira de obter o iLowest e o iHighest para trabalhar?

Arquivos anexados:
Razão: