[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 197

 
CLAIN:

Compagni, aiuto per favore... Ho scritto un codice semplice, ma quando si compila dice che le parentesi sono sbilanciate, ma le ho già contate 300 volte - tutto è a posto

L'idea è semplice - se il MACD è stato sopra (o sotto) lo 0 per 7 minuti o meno, la posizione si apre


Controlla questa funzione

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. come fai a disegnare una sceneggiatura così bene come fai tu?

C'è un pulsante SRC quando scrivi la tua risposta.

Per quanto riguarda le parentesi, ho l'abitudine di specificare a cosa si riferisce la parentesi chiusa

}//per

}// (segnale...

 
splxgf:

E per quanto riguarda le parentesi, ho l'abitudine di specificare a cosa si riferisce la chiusura

}//per

}// (segnale...


"a gusto e colore..." - ma devo ammettere che questo approccio sovraccarica il codice di informazioni inutili + richiede tempo per scrivere linee di codice extra + non risolve il problema della nidificazione profonda (numerazione dei livelli?)

Strutturare meglio il codice - come nell'esempio precedente

 

Buon pomeriggio, potreste dirmi come scrivere una condizione in modo che dopo aver aperto un ordine, il secondo non possa aprirsi sulla stessa candela. Scrivo quanto segue:

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

}

dove

// conta il numero di ordini aperti per un titolo
int CountOrder=0;
for (int j=0; j<OrdersTotal(); j++)
if (OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
if (OrderSymbol()==Symbol()) CountOrder++;

// numero di barra dell'ultima posizione chiusa o -1, se non è stata ancora aperta
int BarLast=BarLastClosePose();


и

// numero di barra dell'ultima posizione chiusa
int BarLastClosePose()
{
datetime t;
int i;

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

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

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

} 

}
Infatti, la variabile logica è superflua qui.
 
Vinin:


Controlla questa funzione


Vinin, verificato, tutto va bene in questa funzione... return(0) si riferisce alla funzione iniziale, e se non si contano le parentesi attaccate a return'y, si ottengono 14 parentesi... 7 a testa
 
CLAIN:

Vinin, verificato, tutto va bene in questa funzione... return(0) si riferisce alla funzione iniziale, e se non si contano le parentesi che sono attaccate a return'y, si ottengono 14 parentesi... 7 in ogni direzione.

Copiare ogni funzione in un file separato e verificare la compilazione aiuta.

Se le parentesi sono corrette, allora indica dove finisce l'inizio e inizia il segnale 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:

Copiare ogni funzione in un file separato e verificare la compilazione aiuta.

Se le parentesi sono corrette, indica dove finisce l'inizio e inizia il segnale MACD.


hmm... int signal_MACD() è effettivamente una funzione... ma perché deve essere dietro la funzione start? onestamente non capisco perché alcune funzioni sono scritte fuori dallo start e altre dentro... qual è la differenza?
 
Per essere onesti, non so se è possibile descrivere una funzione all'interno di un'altra, non ho mai incontrato una cosa del genere.