[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))
[Excluído]  
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.
[Excluído]  
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]){

}