Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 811

 

Qui abbiamo bisogno di piazzare ordini pendenti e calcolare i loro prezzi rispetto al prezzo di chiusura della barra precedente. BUYSTOP viene piazzato, mentre SELLSTOP restituisce l'errore 130. C'è un errore in questo codice? O in un'altra funzione.

void SetOrders() {

doppio ldStop=0, ldTake=0;
int spr=MarketInfo(Symbol(), MODE_SPREAD);
double PredBar=iClose(NULL,PERIOD_M5,1);
double pAsk=PredBar+(DistanceSet+spr)*Point;
double pBid=PredBar-(DistanceSet+spr)*Point;

se (!ExistOrder(1)) {
if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
}
se (!ExistOrder(2)) {
se (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
}
}
 
Pomid:

Qui abbiamo bisogno di piazzare ordini pendenti e calcolare i loro prezzi rispetto al prezzo di chiusura della barra precedente. BUYSTOP viene piazzato, mentre SELLSTOP restituisce l'errore 130. C'è un errore in questo codice? O in un'altra funzione.

void SetOrders() {

  double ldStop=0, ldTake=0;
  int    spr=MarketInfo(Symbol(), MODE_SPREAD);
  double PredBar=iClose(NULL,PERIOD_M5,1);
  double pAsk=PredBar+(DistanceSet+spr)*Point;
  double pBid=PredBar-(DistanceSet+spr)*Point;

  if (!ExistOrder(1)) {
    if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
    if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
    SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
  }
  if (!ExistOrder(2)) {
    if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
    if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
    SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
  }
}

Perché non si rivolge all'autore? È ancora vivo e giovane, non vecchio! Le coordinate sono nel codice sopra ogni funzione! Tutti lo conoscono e lo rispettano!

E impara come inserire il codice come questo, con SRC!

void SetOrders() {

  double ldStop=0, ldTake=0;
  int    spr=MarketInfo(Symbol(), MODE_SPREAD);
  double PredBar=iClose(NULL,PERIOD_M5,1);
  double pAsk=PredBar+(DistanceSet+spr)*Point;
  double pBid=PredBar-(DistanceSet+spr)*Point;

  if (!ExistOrder(1)) {
    if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
    if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
    SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
  }
  if (!ExistOrder(2)) {
    if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
    if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
    SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
  }
}

Hai pasticciato con PredBar senza capirlo, e questo è il risultato! Impara prima la matematica!

 
Buona sera, per favore consigliate come risolvere il problema dell'indicatore che non funziona sulla nuova build. Quando si compila dà errore 'TotalOrders' - tipo di espressione switch illegale (l'errore è evidenziato nel codice ). Saluti, alexander.
 for (i=0; i<k; i++)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
    {
      if ((OrderSymbol()==Symb) && (OrderType()==op))
        {
            ko++;
            TotalOrders[ChartListPosition+1][ko][1]=NormalizeDouble(OrderOpenPrice(),dig);
            TotalOrders[ChartListPosition+1][ko][2]=NormalizeDouble(OrderStopLoss(),dig);
            TotalOrders[ChartListPosition+1][ko][3]=NormalizeDouble(OrderTakeProfit(),dig);
            TotalOrders[ChartListPosition+1][ko][4]=OrderTicket();
            TotalOrders[ChartListPosition+1][ko][5]=OrderLots();
            TotalOrders[ChartListPosition+1][ko][6]=OrderType();
            TotalOrders[ChartListPosition+1][ko][7]=OrderMagicNumber();
            TotalOrders[ChartListPosition+1][0][0]=ko;
           
              switch(TotalOrders[ChartListPosition+1][ko][6])
              {
               case OP_BUY:
                        Type="Buy";
                break;
                
               case OP_BUYSTOP:
                        Type="Buy Stop";

 for(int j=1;j<=OrdersCount;j++)  
      {
       
         switch(TotalOrders[ChartsListPosition+1][j][6])
          {
           case OP_SELL: 
               if (TotalOrders[ChartsListPosition+1][j][2]!=0 && 
                   ask>=(TotalOrders[ChartsListPosition+1][j][2]-NormalizeDouble(StopLevel*point,dig)))  
                   {
                    test=StopLossColor;
                   } 
                   else
                   {
                   if (TotalOrders[ChartsListPosition+1][j][3]!=0 && 
                       ask<=(TotalOrders[ChartsListPosition+1][j][3]+NormalizeDouble(StopLevel*point,dig)))
                      {
                       test=TakeProfitColor;
                      }
                   }
             break;       
 
karwin:
Buona sera, potreste dirmi come risolvere il problema dell'indicatore che non funziona nella nuova build. Quando si compila dà errore 'TotalOrders' - tipo di espressione switch illegale (l'errore è evidenziato nel codice). Saluti, alexander.

La variabile dovrebbe essere lì, non qualcos'altro:

              int Переменная=TotalOrders[ChartListPosition+1][ko][6];
              switch(Переменная)
              {
               case OP_BUY:
                        Type="Buy";
                break;
                
               case OP_BUYSTOP:
                        Type="Buy Stop";
 

Ciao compagni.

Potete consigliarmi, non ho molta dimestichezza con MT5, non l'ho quasi mai usato, durante i test solo un core della CPU è impegnato, ne ho 8, come mai? Come posso rimediare?


 
7Konstantin7:

Ciao compagni.

Potete consigliarmi, non ho molta dimestichezza con MT5, non l'ho quasi mai usato, durante i test solo un core della CPU è impegnato, ne ho 8, come mai? Come posso rimediare?


Dovresti chiedere nel quinto forum
 
7Konstantin7:

Ciao compagni.

Potete consigliarmi, non ho molta dimestichezza con MT5, non l'ho quasi mai usato, durante i test solo un core della CPU è impegnato, ne ho 8, come mai? Come posso rimediare?


È così per i test o per l'ottimizzazione? Se si sta solo testando - un solo core funziona, ma se si abilita l'opzione "Optimize" nel tester di strategia, tutti i core del processore funzioneranno.
 
borilunad:

Hai pasticciato con PredBar senza capire, questo è il risultato! Impara prima la matematica!

Grazie, l'ho imparato e l'ho corretto.
 
evillive:
dovresti chiederlo sul quinto forum

"Non sono un utente di MT5 e presto il sito web sarà affumicato, non mi ci siedo affatto e ho fatto la domanda qui.

barabashkakvn:
È durante i test o l'ottimizzazione? Se fate solo dei test - un solo core funziona, ma quando attivate l'opzione "Optimize" nel tester delle strategie, verranno eseguiti tutti i core del processore.

Ho capito tutto, grazie a tutti. Durante il test un nucleo funziona e tutto funziona come dovrebbe,

Non riesco a capire perché non abbiano usato tutta la potenza del processore nel test.

 
7Konstantin7:

"Non sono un membro del sito, ecco perché ho fatto la domanda qui.

Ho capito tutto, grazie a tutti. Durante il test un nucleo funziona e tutto funziona come dovrebbe,

Non riesco a capire perché non usano tutta la potenza del processore nei test.

E perché dovremmo caricare tutti i core durante i test (senza ottimizzazione attivata)? Dopo tutto, se il test con la visualizzazione, non c'è fretta, e se il test senza visualizzazione - così i computer moderni eseguire questo compito come semi di girasole su un singolo core.
Motivazione: