[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 197

 
CLAIN:

Compañeros, ayuda por favor... He escrito un código sencillo, pero al compilar dice que los paréntesis están desequilibrados, pero ya los he contado 300 veces: todo está en su sitio

La idea es simple: si el MACD ha estado por encima (o por debajo) de 0 durante 7 minutos o menos, la posición se abre


Compruebe esta función

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.d. ¿cómo se dibuja un guión tan bien como lo haces tú?

Hay un botón SRC cuando escribes tu respuesta.

En cuanto a los paréntesis, tengo la costumbre de especificar a qué se refiere el paréntesis de cierre

}//para

}// (señal...

 
splxgf:

Y en cuanto a los paréntesis, tengo la costumbre de especificar a qué se refiere el cierre

}//para

}// (señal...


"para todos los gustos..." - pero debo admitir que este enfoque sobrecarga el código con información innecesaria + requiere tiempo para escribir líneas de código adicionales + no resuelve el problema de la anidación profunda (¿numeración de niveles?)

Estructurar mejor el código - como en el ejemplo anterior

 

Buenas tardes, podrían decirme cómo escribir una condición para que después de abrir una orden, la segunda no pueda abrirse en la misma vela. Escribo lo siguiente:

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

}

donde

// contar el número de órdenes abiertas para un valor
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 barra de la última posición cerrada o -1, si aún no se ha abierto
int BarLast=BarLastClosePose();


и

// Número de barra de la última posición cerrada
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));
}

 
Gracias 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];

} 

}
De hecho, la variable lógica es superflua aquí.
 
Vinin:


Compruebe esta función


Vinin, verificado, todo está bien en esta función... return(0) se refiere a la función de inicio, y si no se cuentan los paréntesis adjuntos a return'y, se obtienen 14 paréntesis... 7 en cada sentido
 
CLAIN:

Vinin, verificado, todo está bien en esta función... return(0) se refiere a la función de inicio, y si no se cuentan los paréntesis que se adjuntan a return'y, se obtienen 14 paréntesis... 7 en cada sentido.

Copiar cada función en un archivo separado y verificar la compilación ayuda.

Si los paréntesis son correctos, entonces indique dónde termina el inicio y comienza la señal del 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:

Copiar cada función en un archivo separado y verificar la compilación ayuda.

Si los corchetes son correctos, indique dónde termina el inicio y comienza la señal del MACD.


hmm... int signal_MACD() es efectivamente una función... ¿pero por qué tiene que estar detrás de la función de inicio? sinceramente no entiendo por qué algunas funciones se escriben fuera del inicio y otras dentro... ¿cuál es la diferencia?
 
Para ser sincero, no sé si es posible describir una función dentro de otra, nunca me he encontrado con algo así.