[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 404

 
Dimka-novitsek:
Non posso organizzare un ciclo, X e Y sono sempre uguali a 0.

Per prima cosa, sgomberate la spazzatura nella vostra mente.

Rendete il vostro codice bello e strutturato.

E non essere avido di commenti.

 

Sì, certo.

Prima seleziono gli ordini con il numero magico richiesto e su quella coppia di valute. if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) {

Poi il ciclo for( i=OrdersTotal();i==0;i--) in cui seleziono gli ordini come questo OrderSelect(i,SELECT_BY_POS ); e poi conto quanti ordini come OP_SELLSTOP

Se non ci sono ordini, allora apriamo un ordine del tipo di ordine che non esiste. La variabile X nel ciclo superiore e la variabile Y nel ciclo inferiore sono utilizzate per contare gli ordini del tipo necessario. Entrambi i cicli sono uguali nella struttura e nello scopo.

Ho già scritto con spiegazioni, ma qui papà è venuto, ha chiamato, ha portato latte, tè e halva, e non ho inviato un messaggio, sono andato a fare pipì, e mio padre ha cancellato il messaggio non inviato, ha detto, ma cosa, si potrebbe scrivere in un'altra finestra del motore di ricerca? Mi chiedevo cosa fosse la pasta di ortica, mi sono un po' spaventato e l'ho mandata senza quasi nessuna spiegazione.

Bene, X e Y sono sempre 0. Il ciclo for non deve funzionare. Non capisco cosa potrebbe non funzionare, a causa di questo gli ordini si aprono 2 su ogni tick.


 
Dimka-novitsek:

Sì, certo.

Prima seleziono gli ordini con il numero magico richiesto e su quella coppia di valute. if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) {

Poi il ciclo for( i=OrdersTotal();i==0;i--) in cui seleziono gli ordini come questo OrderSelect(i,SELECT_BY_POS ); e poi conto quanti ordini come OP_SELLSTOP

Se non ci sono ordini, allora apriamo un ordine del tipo di ordine che non esiste. La variabile X nel ciclo superiore e la variabile Y nel ciclo inferiore sono utilizzate per contare gli ordini del tipo necessario. Entrambi i cicli sono uguali nella struttura e nello scopo.

Ho già scritto con spiegazioni, ma qui papà è venuto, ha chiamato, ha portato latte, tè e halva, e non ho inviato un messaggio, sono andato a fare pipì, e mio padre ha cancellato il messaggio non inviato, ha detto, ma cosa, si potrebbe scrivere in un'altra finestra del motore di ricerca? Mi chiedevo cosa fosse la pasta di ortica, mi sono un po' spaventato e l'ho mandata senza quasi nessuna spiegazione.

Bene, X e Y sono sempre 0. Il ciclo for non deve funzionare. In breve, non capisco affatto cosa potrebbe non funzionare lì, sta causando l'apertura di 2 ordini su ogni tick.


È proprio così, i cicli for non fanno ciò di cui avete bisogno.

Avete il seguente: for( i=OrdersTotal();i==0;i--)

1) Se ci sono 0 ordini, il ciclo sarà eseguito 1 volta. In questo caso, selezionerà l'incognita e farà l'incognita con essa =)

2) Se ci sono più di 0 ordini, il ciclo non parte affatto, perché la condizione "i==0" non è soddisfatta

 
Grazie!!! Rileggerò il riferimento tra un momento!
 
Sì, grazie!!!
 
Ds sai, non riesco a farlo bene, è tutto uguale.
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
 for ( i=OrdersTotal();i>0;i--){Alert ("i", i); OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+-------------------------------------------
In aiuto dice

L'espressione2 è un controllo della condizione di fine ciclo. Se è vero, viene eseguito l'operatore del corpo del ciclo for.

ecc. Ho sistemato tutto e non è cambiato nulla...ho anche provato a mettere i=5 invece di i=OrdersTotal(), non è cambiato nulla, il ciclo non funziona.
 
Dimka-novitsek:
Il testo di aiuto dice

L'espressione2 è un controllo della condizione di fine ciclo. Se è vero, viene eseguito l'operatore del corpo del ciclo for.

ecc. Ho sistemato tutto e non è cambiato nulla...ho anche provato a mettere i=5 invece di i=OrdersTotal(), non è cambiato nulla, il ciclo non funziona.

Giusto, il loop non arriva al loop.

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);

Hai scritto: "Se il simbolo dell'ordine (quale ordine? ce ne sono molti... o nessuno) è uguale all'ordine corrente e la sua magia (quale ordine?) è uguale a 1000, allora esegui il ciclo".

e dovete: "iniziare un ciclo". In esso: 1) seleziona un ordine. 2) e se simbolo =... e magia =1000, allora X++;"

 

Alcuni DC nei conti reali assegnano ogni sorta di prefissi come "." o "FXF" ai nomi dei simboli.

Come posso usare questi prefissi?

L'ho fatto in questo modo:

#define DEF_SPEC "FXF"

stringa SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -non funziona

stringa SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -non funziona nemmeno così

come risultato ottengo solo FXF invece di AUDCADFXF.

Puoi dirmi come implementare questo?
 
pusheax:

Alcuni DC nei conti reali assegnano ogni sorta di prefissi come "." o "FXF" ai nomi dei simboli.

Come posso usare questi prefissi?

Ho fatto questo:

#define DEF_SPEC "FXF"

stringa SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -non funziona

stringa SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -non funziona nemmeno così

come risultato ottengo solo FXF invece di AUDCADFXF.

Puoi dirmi come implementare questo?

Beh, è così che funziona al volo:

#define DEF_SPEC "FXF"
string SymbolsTrade[] = {"AUDCAD", "EURUSD"};

int init()
{
   for (int i = 0; i < ArraySize(SymbolsTrade); i++)
      SymbolsTrade[i] = SymbolsTrade[i] + DEF_SPEC;
 

Capito, lo farò...

Inoltre, la condizione non funziona.

OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}Alert ("Y", Y);}