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

 
CLAIN:

Camaradas, ajudem, por favor... Escrevi um código simples, mas na compilação ele diz que os parênteses estão fora de equilíbrio, mas já os contei 300 vezes - tudo está no lugar

A idéia é simples - se MACD esteve acima (ou abaixo) 0 por 7 minutos ou menos, a posição abre


Verifique esta função

void AnalyzeSignal(int signal) 
{ 
  if(signal == 100) 
  { 
    ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green); 
    if(ticket>0) 
    { 
      OrderSelect(ticket,SELECT_BY_TICKET); 
      Print("открылись на покупку по цене:" OrderOpenPrice()); 
    } 
    else 
    { 
      Print("открыться не удалось по причине:" GetLastError()); 
      return(0); 
    } 
  } 
  if(signal == -100) 
  { 
    ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green); 
    if(ticket>0) 
    { 
      OrderSelect(ticket,SELECT_BY_TICKET); 
      Print("открылись на продажу по цене:" OrderOpenPrice()); 
    } 
    else 
    { 
      Print("открыться не удалось по причине:" GetLastError()); 
      return(0); 
    } 
  } 
} 

//---- 
return(0); 
} 
 
CLAIN:
p.s., como você desenha um roteiro tão bem como você?

Há um botão SRC quando você escreve sua resposta.

Quanto a parênteses, tenho o hábito de especificar a que se refere o parêntese fechado

}// para

}/// (sinal...

 
splxgf:

E quanto aos parênteses, tenho o hábito de especificar a que se refere o fechamento

}// para

}/// (sinal...


"para saborear e colorir..." - mas devo admitir que esta abordagem sobrecarrega o código com informações desnecessárias + leva tempo para escrever linhas extras de código + não resolve o problema do aninhamento profundo (níveis de numeração?)

Estruturar melhor o código - como no exemplo acima

 

Boa tarde, poderia me dizer como escrever uma condição para que, após abrir um pedido, o segundo não possa abrir na mesma vela? Estou escrevendo o seguinte:

se (... && CountOrder<2 && (BarLast>1 || BarLast==-1))
{
OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,0, "BUY: ",MagicL,0,Green);

}

onde

// contar o número de pedidos abertos para um título
int CountOrder=0;
for (int j=0; j<OrdersTotal(); j++)
if (OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
if (OrderSymbol()==Symbol()) CountOrder++;

// número de barras da última posição fechada ou -1, se ainda não foi aberta
int BarLast=BarLastClosePose();


и

// número de barras da última posição fechada
int BarLastClosePose()
{
datetime t;
int i;

for (i=0; i<OrdersHistoryTotal(); i+++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
//if (OrderMagicNumber()!=Magic) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderCloseTime()) t=OrderCloseTime();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

 
Obrigado Roger
 
datetime LastTradeBar;

bool CanTrade = True;

int Start()

{ 

if (LastTradeBar==Time[0] ) CanTrade=False; else CanTrade=True; 

if (... && CountOrder<2 && (BarLast>1 || BarLast==-1))
{
if (CanTrade)

{

OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,0,"BUY: ",MagicL,0,Green);

LastTradeBar=Time[0];

} 

}
Na verdade, a variável lógica é supérflua aqui.
 
Vinin:


Verifique esta função


Vinin, verificado, tudo está bem nesta função... return(0) refere-se à função de partida, e se você não contar os colchetes anexados ao return'y, você recebe 14 colchetes... 7 em cada sentido
 
CLAIN:

Vinin, verificado, tudo está bem nesta função... return(0) refere-se à função de partida, e se você não contar os colchetes que estão anexados ao return'y, você recebe 14 colchetes... 7 em cada sentido.

A cópia de cada função em um arquivo separado e a verificação da compilação ajudam.

Se os parênteses estiverem corretos, então indique onde termina o início e começa o sinal MACD.

int start() 
{ 
//---- 

int total,ticket; //объявил тотал и тикет 
int signal = signal_MACD(); //сигнал МАКД передает значение в сигнал
AnalyzeSignal(signal); //аналайз сигнал анализирует сигнал
int MACD[8] = {0,1,2,3,4,5,6,7}; //создал одномерный массив МАКД
MACD[0] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,7); 
///Бла-бла-бла
MACD[7] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,0); 

total = OrdersTotal(); //тотал считает ордера
///Тут большая жирная закрывающая скобка, если конечно следующая строчка это функция
int signal_MACD()
 
splxgf:

A cópia de cada função em um arquivo separado e a verificação da compilação ajudam.

Se os parênteses estiverem corretos, indicar onde termina o início e começa o sinal MACD.


hmm... int signal_MACD() é de fato uma função... mas por que tem que estar por trás da função inicial? honestamente não entendo por que algumas funções são escritas fora da função inicial e outras dentro... qual é a diferença?
 
Para ser honesto, não sei se é possível descrever uma função dentro de outra, eu nunca me deparei com tal coisa.