[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 341

 
Cari neofiti! Alcune domande discusse qui sono molto specifiche e meritano davvero consigli e aiuto. Ma alcuni, beh, francamente, nascono dal fatto che iniziando a programmare alcuni scrittori ESPERTI non leggono nemmeno un libro di testo sulla MCL. SUGGERIMENTO: scarica il tutorial (5 mb) e leggilo e non dovrai aspettare una risposta dal forum - sarà nella tua testa.
 
costy_ >> :

I parametri di indicazione salvati sono "inseriti" negli indicatori una volta durante l'inizializzazione del modello, poi "diventano completamente indipendenti"/.

Tutti i parametri dell'indicatore modificati sono salvati nel modello, se avete cambiato i parametri dell'indicatore, salvate nuovamente il modello.


>> Grazie!

 

mazepa 08.12.2009 17:42

RISPOSTA: sul CODICE!

Se ho capito l'algoritmo, allora all'ora stabilita apriamo buy (sell), se il prezzo è passato >10 pips nell'altra direzione, allora chiudiamo l'ordine e ci posizioniamo nella direzione opposta.

Per la chiusura, sto usando la mia funzione universale.

//funzione per chiudere tutti gli ordini di mercato in--------------------------------------------------------------------------------------------------
void _CloseAllOrder()
{
for(int i=0; i<OrdersTotal(); i++) //crossing di tutti gli ordini per tutte le valute
{
if (OrderSelect(i,SELECT_BY_POS)==true) //se l'ordine è selezionato con successo
{
if (OrderSymbol()!=Symbol()) continua; //se l'ordine è nella valuta sbagliata, continua la ricerca
{
switch(OrderType()) //nell'ordine richiesto, determina il tipo (Bue_Sell) e lo chiude
{
case 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
case 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
}
}
}
}
return;
}
Quindi ora prima di aprire nella direzione opposta basta scrivere _CloseAllOrder()

 


Amici, sto solo imparando. Per favore non guardate il contenuto del programma, ma aiutatemi a trovare un bug nel programma:

int start()
{
switch(CurrentState)
{
case STATE_SHORT:
MyOrderTicket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 1, 0, 0,NULL, 1, 0, Red);
OrderSelect(MyOrderTicket,SELECT_BY_TICKET);
if (OrderModify(OrderTicket(),OrderOpenPrice(),Bid+90*Point,Bid-Profit1*Point,0,Green)==true)
{CurrentState=STATE_1;
break;
}
case STATE_1:
OrderSelect(MyOrderTicket,SELECT_BY_TICKET);
if(Ask <= OrderTakeProfit())
{CurrentState=STATE_SHORT;
break;
}
if(Bid >= (OrderOpenPrice()+Profit1*Point)
{CurrentState=STATE_SHORT;
break;
}
}
//----
return(0);
}


L'errore è il seguente: \ fine del programma" - parentesi sinistra sbilanciata. Dov'è l'errore?









 
Klinskih >> :

Amici, sto solo imparando. Per favore non guardate il contenuto del programma, ma aiutatemi a trovare un bug nel programma:

Capito:

                    if(Bid >= (OrderOpenPrice()+ Profit1*Point)

bisogno:

                    if(Bid >= OrderOpenPrice()+ Profit1*Point)



 

Come dichiarare un array unidimensionale senza applicare un record a ogni cella di memoria (è possibile)

  ии[1]=ExtMapBuffer1[0]; ии[2]=ExtMapBuffer2[0];  ии[3]=ExtMapBuffer3[0]; 

ma da una sequenza unidimensionale

  ии[3]={ExtMapBuffer1[0],ExtMapBuffer2[0],ExtMapBuffer3[0]} 

o la sequenza unidimensionale è solo per le costanti numeriche e logiche!!!?

 
TheXpert >> :

Capito:

>> dobbiamo farlo:



Grazie, amico!

 
future >> :

Un'altra domanda. Se (OrdiniTotali()==0) questo... se il numero di ordini aperti è uguale a zero... allora come sarà... se il numero di ordini aperti PER IL GIORNO è uguale a zero.

Non c'è qualcosa come OrdersDayTotal?

no, ma possiamo sempre scrivere la nostra funzione)

int OrdersDayTotal(string Symb)
 {
int cnt,
OrdersDayTotal=0,
Time0=iTime(NULL,PERIOD_D1,0);

for( cnt=0; cnt<OrdersTotal(); cnt++)
   {
   OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);
   if(OrderSymbol()== Symb && OrderType()<2)
      {
      if(OrderOpenTime()> Time0) OrdersDayTotal++;
      }
   }
for( cnt=0; cnt<OrdersHistoryTotal(); cnt++)
   {
   OrderSelect( cnt, SELECT_BY_POS, MODE_HISTORY);
   if(OrderSymbol()== Symb && OrderType()<2)
      {
      if(OrderOpenTime()> Time0) OrdersDayTotal++;
      }
   }
return( OrdersDayTotal);
 }

Conta gli ordini Compra e Vendi, per un dato simbolo, aperti oggi. Nessun ordine in sospeso.

if(OrdersDayTotal(Symbol())==0) {...}

qualcosa del genere)

 
Stepan241 >> :

mazepa 08.12.2009 17:42

RISPOSTA: Su COD!

Se ho capito l'algoritmo, apriamo l'acquisto (vendita) all'ora stabilita, se il prezzo passa >10 pip nell'altra direzione, chiudiamo l'ordine e ci spostiamo sul lato opposto.

Per la chiusura uso la mia funzione universale.

//Funzione per chiudere tutti gli ordini a mercato in finestra--------------------------------------------------------------------------------------------------
void _CloseAllOrder()
{
for(int i=0; i<OrdersTotal(); i++) //cullare tutti gli ordini per tutte le valute
{
if (OrderSelect(i,SELECT_BY_POS)==true) //se l'ordine è selezionato con successo
{
if (OrderSymbol()!=Symbol()) continue; //se l'ordine è nella valuta sbagliata, continua la ricerca
{
switch(OrderType()) //quando l'ordine richiesto è inviato, definire il suo tipo (Bue_Sell) e chiuderlo
{
caso 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
caso 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
}
}
}
}
ritorno;
}
Quindi ora basta scrivere _CloseAllOrder() prima di aprire nella direzione opposta


La funzione è la bomba mi ha preso un paio di pagine, grazie mille.
 
Stepan241 >> :

mazepa 08.12.2009 17:42

RISPOSTA: Su COD!

Se ho capito l'algoritmo, apriamo l'acquisto (vendita) all'ora stabilita, se il prezzo si è mosso >10 pip nell'altra direzione, chiudiamo l'ordine e ci muoviamo nella direzione opposta.

Per la chiusura uso la mia funzione universale.

//Funzione per chiudere tutti gli ordini a mercato in finestra--------------------------------------------------------------------------------------------------
void _CloseAllOrder()
{
for(int i=0; i<OrdersTotal(); i++) //cullare tutti gli ordini per tutte le valute
{
if (OrderSelect(i,SELECT_BY_POS)==true) //se l'ordine è selezionato con successo
{
if (OrderSymbol()!=Symbol()) continue; //se l'ordine è nella valuta sbagliata, continua la ricerca
{
switch(OrderType()) //quando l'ordine richiesto è inviato, definire il suo tipo (Bue_Sell) e chiuderlo
{
caso 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
caso 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
}
}
}
}
ritorno;
}
Quindi ora basta scrivere _CloseAllOrder() prima di aprire nella direzione opposta


La funzione è la bomba mi ha preso un paio di pagine, grazie mille.