[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 279

 
veti-k:
Olá, você pode me dizer como determinar quantos pips um pedido é lucrativo?
Se você tem uma posição de compra, você deve subtrair o preço de abertura do preço atual da Licitação. Se for uma posição de venda, você deve subtrair o preço Ask atual do preço de abertura.
 
paladin80:
Se uma posição de compra for aberta, subtraia o preço de abertura do preço atual da Licitação. Se a posição for uma posição de venda, subtraia o preço de venda atual do preço de abertura.

Os escoteiros descobriram que OrderClosePrice() pode ser usado em vez de Bid or Ask
 
Obrigado))
 
Caros usuários do fórum, você poderia me dizer como colocar uma variável do iCustom no ArrayMaximum?
 
Alexandr24:
Prezados usuários do fórum, você poderia aconselhar como colocar uma variável do iCustom no ArrayMaximum ?
Para isso você precisa ler o que o ArrayMaximum é.

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Ele procura o elemento com o valor máximo. A função retorna a posição do elemento máximo na matriz.

A busca é um processo, não uma variável. Ou seja, você pode atribuir um valor indicador a um elemento da matriz e, em seguida, procurar o maior elemento da matriz com o ArrayMaximum.
 
granit77:
Para isso você deve ler o que é o ArrayMaximum.

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Procure o elemento com o valor máximo. A função retorna a posição do elemento máximo na matriz.

A busca é um processo, não uma variável. Ou seja, você pode atribuir um valor indicador a um elemento da matriz e depois procurar o elemento máximo na matriz com o ArrayMaximum.
Como encontrar o valor máximo do indicador de ontem? Encontrei o primeiro e o valor máximo do indicador do dia de ontem, mas não consigo encontrar o valor máximo do dia de ontem, ArrayMaximum começa a procurar em todo o gráfico, ou pode ser feito por alguma outra função?
 

Boa tarde a todos, estou sentado em frente ao meu computador batendo a cabeça contra o teclado - não consigo corrigir um bug no código... por favor, ajude um iniciante.

Aqui está o meu código de coruja:

duplo TakeProfit externo = 500;

Lotes duplos externos = 0,1;

Parada dupla externa = 30;

TrailingStop duplo externo = 30;

Indicador de cadeia externa_1 = "SAR (SAR_STEP)";

duplo SAR_Step externo = 0,02;

duplo SAR_MaxStep externo =0,2;

duplo exterior GeneralShift = 0; // 0 - barra não fechada, 1 - fechada.

// Estas são as variáveis que serão

// exibido durante

// conexão do Expert Advisor com o quadro


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

//| |

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

int start()

{

duplo a;

int b;

int total, bilhete, cnt;


// apenas variáveis a serem utilizadas no programa


if(Bars<100)

{

Impressão ("barras com menos de 100");

retorno(0);

}

// Esta condição verifica se o histórico do gráfico contém mais de 100 castiçais, e se não, retorna um erro,

// irá gerar um erro. É necessário chamar sua atenção para o problema de

// falta de informação


if(TakeProfit<5)

{

Imprimir ("TakeProfit menos de 5");

retorno(0);

}

// Esta condição verifica o nível TakeProfit (uma das variáveis externas,

// que controla o nível de tomada de lucro. É necessário verificar se // você definiu os níveis de Take Profit.

// verifique se você estabelece níveis de tomada de lucro em um nível não permitido por sua corretora.

// Não permitido para sua empresa de corretagem. É que se seu Expert Advisor falhar, você // sabe exatamente qual é o erro.

// onde se encontra o erro. Eu recomendo vivamente que seja definido.


total=OrdensTotal();

if(total<1)

// Esta verificação é necessária, a fim de evitar a abertura de várias posições idênticas ao mesmo tempo. Se não for verificado, então, por exemplo, se sua EA for acionada quando o estocástico estiver na zona de sobre-compra, então ela negociará em cada carrapato até que tenha esgotado toda a margem.

// Portanto, a fim de limitar o número de posições em aberto, esta

// limitador. Se for definido, então o Assessor não abrirá mais do que um certo // número de

// número de posições <x

{

// nenhuma ordem em aberto identificada

if(AccountFreeMargin()<(1000*Lots))

{

Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin();

retorno(0);

}

// Outra peça de código auxiliar. Se não houver dinheiro suficiente na conta, ele

// imprime um erro. Esta peça é completamente inútil se o Expert Advisor trabalhar

// em tempo real, mas é muito útil em testes sobre a história.


if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Fechar[0]); // Abrir COMPRA

// Finalmente chegamos à parte mais interessante. Em vez desses x's, temos de inserir

// condição que aciona uma COMPRA.


{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-Stoploss*Point, Ask+TakeProfit*Point, "comment",16384,0,Green);


// Estas são as condições de compra. Em princípio, não há nada a ser mudado aqui, mas a fim de ampliar //meu horizonte, eu amplio o âmbito.

// Vou decifrar o que diz aqui. Diz aqui que devemos comprar

// (OP_BUY) o símbolo atual (par de moedas, ao qual este Expert Advisor foi anexado),

// tamanho do comércio Lotes (variável que é definida no início). Preço de mercado, com

// deslizamento 3, e com um conjunto de StopLoss e TakeProfit no

no // início, o comércio será marcado com o comentário "comentário", com o número determinante 0, e no

// no ponto de compra, no gráfico, haverá um deslizador verde com o código determinante

// 16384


if(bilhete>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido aberto : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError()));

retorno(0);

}


// Este bloco só é necessário para registrar se tudo correu bem.

// Ou, caso contrário, para registrar um erro que causou a falha de algo.


// Agora a mesma coisa com a aposta de venda. Ao invés de YYYYYY - condição

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)<Fechar[0])

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+Stoploss*Point,Bid-TakeProfit*Point, "macd sample",16384,0,Red);

if(bilhete>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido de venda aberto : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError()));

retorno(0);

}

retorno(0);

}


// Agora a saída. Nada mudou aqui também, é apenas RRRRRRR - condição

// fechar um negócio por BUY, ZZZZZZZZZZ - por SELL


for(cnt=0;cnt

// por um tempo eles olham através de todas as posições abertas

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && // verificar se há posições abertas

OrderSymbol()==Symbol()) // verificar o símbolo

{

if(OrderType()==OP_BUY) // posição longa é aberta

{

// deve ser fechado?

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)<Fechar[0]) //fechar COMPRAR.

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // posição fechada

retornar(0); // sair

}

// verificar a parada de trilha

if(TrailingStop>0)

{

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

{

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

{

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

retorno(0);

}

}

}

}

outra // O mesmo com posição curta

{

// deve ser fechado?

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Fechar[0])//fechar SELL

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // posição fechada

retornar(0); // sair

}

// verificar a parada de trilha

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||| (OrderStopLoss()==0)))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

retorno(0);

}

}

}

}

}

}

}

retorno(0);

//--------

}

//-------- o fim.

 

O comerciante de automóveis não pode pegar um bicho!!! POR FAVOR, ME AJUDE!!!!!!!!!!!!!!!!!!

'}' - parênteses desequilibrados C:\Program Files (x86)\Forex4you MetaTrader 4\Saurentios V101.mq4 (167, 1)

 
Eu gostaria de não ter batido com a cabeça ao formatar um código como este. Eu vou consertar isso :)
 

Você repetiu o erro várias vezes:

Você coloca uma condição, depois escreve algo entre parênteses, depois coloca um ponto-e-vírgula atrás do parêntese de fechamento. assim:

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0]); 

Isso não está certo. Isto é correto:

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0]){

}
Razão: