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

 
gordeef:

Sono già cauto con le inversioni e le correzioni. Ma per quanto riguarda l'esaurimento della tendenza sono anche interessato in esso, ho vagato attraverso il forum e guardato CodeBase, ma non ha incontrato alcun indice su questo argomento. Sarà interessante leggere i vostri risultati. Ho un'altra domanda, mi hanno mandato un EA che controlla le mie perdite e i miei profitti, come nell'immagine dovrebbe funzionare, ma la domanda è, ha un profitto di 15 punti e vedo che il prezzo può andare ancora più in alto, se aumento il profitto su uno o un altro trade, potrebbe rompere i calcoli generali e il funzionamento dell'EA?
Penso che la risposta giusta a questa domanda possa essere nelle viscere del mio Expert Advisor... Forse risponderà uno dei compagni molto più esperti... Penso che la loro risposta sarà più valida dalla loro esperienza - io sono solo un principiante... :)
 
artmedia70:

OK. Grazie, Victor. Finora funziona correttamente. Finora, perché non l'ho seguito per molto tempo, ma non ho mai avuto un output Trend Up per me prima. Lo è ora:


Sapevo che c'era sempre un mago-stregone più potente per un aspirante stregone... :)

È tutto per scherzo, naturalmente, ma... Victor, non voglio solo copiare ciecamente la soluzione giusta, e scoprire e capire dove si nasconde il cane, qual è l'essenza del problema e questo comportamento del codice incomprensibile per me?


Problemi di logica. Non più di questo. Prova a disegnare schemi a blocchi. Aiuta
 

Ho un'altra domanda: all'inizio stavo facendo N linee, ma poi mi sono reso conto che una di esse sarebbe stata superflua e sarebbe stato più appropriato metterla tra parentesi nella forma percentuale numerica, così l'ho rimossa e messa accanto a quella dove c'era solo spazio per essa:

All'inizio era così:


Ed è così che è ora:


Sono perseguitato da echi di eventi passati... Quando l'EA viene lanciato per la prima volta, prima che arrivi un nuovo tick, mostra sempre quello che era originariamente... Anche se non è più nel codice da molto tempo. Da dove vengono i fantasmi?

 
artmedia70:

È venuta fuori un'altra questione: all'inizio stavo facendo un certo numero di righe, ma poi mi sono reso conto che una di esse sarebbe stata superflua e sarebbe stato più appropriato metterla tra parentesi nella forma percentuale numerica, così l'ho tolta e messa accanto a quella dove c'era solo spazio per essa:

All'inizio era così:


Ed è così che è ora:


Sono perseguitato da echi di eventi passati... Quando l'EA viene lanciato per la prima volta, prima che arrivi un nuovo tick, mostra sempre quello che era originariamente... Anche se non è più nel codice da molto tempo. Da dove vengono i fantasmi?





Bisogna guardare il codice. Smontate la logica.
 
Vinin:

Problemi logici. Niente di più. Prova a disegnare schemi a blocchi. Aiuta

:):) Grazie... Eh... Ho già un tale 'tartan' sparso sul mio pavimento... Mamma mia! Non sembra esserci molta logica nelle tre linee. Si scopre che quando si controlla: se il 1°, allora fallo, se non fai il 1°, ovviamente il 2° viene dopo. Se il 2° fallisce, segue il 3°...

No... È così: se è il 1°, allora è così... Altrimenti, se il 2°, facciamo così-c, altrimenti, se non il 1° e il 2°, facciamo il terzo, e se non il 1°, non il 2° e non il 3°, allora cerchiamo errori di logica...

Oh... Anch'io sono completamente confuso... Bene, Victor, la tua aggiunta si comporta correttamente, e ora cercherò di capire perché ho bisogno di un altro operatore else che sembra essere in quel posto dove questo "altrimenti" si verifica comunque, dopo essermi scervellato...

Grazie per il consiglio.

 
Vinin:

Bisogna guardare il codice. Per risolvere la logica.

Non c'è quasi nessuna logica - il semplice output di linee in ordine uno dopo l'altro...

/--------------------------------------------------------------- 1 --
// Функция вывода на экран графических сообщений.
//--------------------------------------------------------------- 2 --
  int Informations()
  {
   int   Win_ind;                     // Номер окна индикатора
   int   x,y;
   
   trH4     =Trend_PSAR(NULL,240);  // Четырёхчасовой тренд
   trH1     =Trend_PSAR(NULL,60);   // Часовой тренд
   trM30    =Trend_PSAR(NULL,30);   // Получасовой тренд
   trM15    =Trend_PSAR(NULL,15);   // 15-ти минутный тренд

//--------------------------------------------------------------- 3 --
   Win_ind= WindowFind("Info");        // Ищем номер окна индикатора
   if (Win_ind<0)return;               // Если такого окна нет, уходим
//--------------------------------------------------------------- 4 --
   x =10; y =17;
   ObjectCreate("Equ",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Equ",OBJPROP_XDISTANCE,x);
   ObjectSet("Equ",OBJPROP_YDISTANCE,y);
   ObjectSetText("Equ",    "Свободные средства",9,"Tahoma",Gold);
   
   ObjectCreate("EquVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("EquVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("EquVal",OBJPROP_YDISTANCE,y);
   ObjectSetText("EquVal",DoubleToStr(Equ_NEW,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("Prof",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Prof",OBJPROP_XDISTANCE,x);
   ObjectSet("Prof",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("Prof",   "Уровень фиксации прибыли (      %)",9,"Tahoma",Gold);
   
   ObjectCreate("ProfVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ProfVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("ProfVal",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("ProfVal", DoubleToStr(Equ_OLD+EquPerc,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------    
   ObjectCreate("Perc",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Perc",OBJPROP_XDISTANCE,x*18);
   ObjectSet("Perc",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("Perc", DoubleToStr(PercentEquityForClose,1),9,"Tahoma",Yellow);
   
//--------------------------------------------------------------------   
   ObjectCreate("Tral",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Tral",OBJPROP_XDISTANCE,x);
   ObjectSet("Tral",OBJPROP_YDISTANCE,y*3);
   ObjectSetText("Tral",   "Уровень включения трала",9,"Tahoma",Gold);
   
   ObjectCreate("TralVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TralVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("TralVal",OBJPROP_YDISTANCE,y*3);
   ObjectSetText("TralVal", DoubleToStr(Equ_OLD-EquPerc,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("Wloss",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Wloss",OBJPROP_XDISTANCE,x);
   ObjectSet("Wloss",OBJPROP_YDISTANCE,y*4);
   ObjectSetText("Wloss",  "Порог выставления безубытка",9,"Tahoma",Gold);
   
   ObjectCreate("WlossVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("WlossVal",OBJPROP_YDISTANCE,y*4);
   ObjectSetText("WlossVal", DoubleToStr(LevelProfit,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("WlossPP",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossPP",OBJPROP_XDISTANCE,x);
   ObjectSet("WlossPP",OBJPROP_YDISTANCE,y*5);
   ObjectSetText("WlossPP","Размер безубытка в пунктах",9,"Tahoma",Gold);
   
   ObjectCreate("WlossPPVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossPPVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("WlossPPVal",OBJPROP_YDISTANCE,y*5);
   ObjectSetText("WlossPPVal",DoubleToStr(LevelWLoss,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("ATR",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ATR",OBJPROP_XDISTANCE,x);
   ObjectSet("ATR",OBJPROP_YDISTANCE,y*6);
   ObjectSetText("ATR",    "Волатильность рынка",9,"Tahoma",Gold);
   
   ObjectCreate("ATRVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ATRVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("ATRVal",OBJPROP_YDISTANCE,y*6);
   ObjectSetText("ATRVal", DoubleToStr(VolATR,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("TP",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TP",OBJPROP_XDISTANCE,x);
   ObjectSet("TP",OBJPROP_YDISTANCE,y*7);
   ObjectSetText("TP",     "Размер Take Profit",9,"Tahoma",Gold);
   
   ObjectCreate("TPVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TPVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("TPVal",OBJPROP_YDISTANCE,y*7);
   ObjectSetText("TPVal", DoubleToStr(TPatr,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("trH4",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trH4",OBJPROP_XDISTANCE,x);
   ObjectSet("trH4",OBJPROP_YDISTANCE,y*9);
   
   ObjectCreate("ArrowH4",OBJ_LABEL,Win_ind,0,0,0,0);
   ObjectSet("ArrowH4",OBJPROP_XDISTANCE,x*8);
   ObjectSet("ArrowH4",OBJPROP_YDISTANCE,y*9);

   if (trH4==1)
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",Lime);
         ObjectSetText("ArrowH4",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",Lime);
      }
   else if (trH4==-1)
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowH4",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",LightGray);
         ObjectSetText("ArrowH4",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trH1",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trH1",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trH1",OBJPROP_YDISTANCE,y*9);
   
   ObjectCreate("ArrowH1",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowH1",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowH1",OBJPROP_YDISTANCE,y*9);
   
   if (trH1==1)
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",Lime);
         ObjectSetText("ArrowH1",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",Lime);
      }
   else if (trH1==-1)
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowH1",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",LightGray);
         ObjectSetText("ArrowH1",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trM30",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM30",OBJPROP_XDISTANCE,x);
   ObjectSet("trM30",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM30",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM30",OBJPROP_XDISTANCE,x*8);
   ObjectSet("ArrowM30",OBJPROP_YDISTANCE,y*10);
   
   if (trM30==1)
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",Lime);
         ObjectSetText("ArrowM30",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",Lime);
      }
   else if (trM30==-1)
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM30",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",LightGray);
         ObjectSetText("ArrowM30",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM15",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trM15",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM15",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowM15",OBJPROP_YDISTANCE,y*10);
   
   if (trM15==1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",Lime);
         ObjectSetText("ArrowM15",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",Lime);
      }
   else if (trM15==-1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM15",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   else if (trM15==0)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
/*
   else
      {
         ObjectSetText("trM15","Хрен вам",9,"Tahoma",LightGray);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",LightGray);
      }
*/
//--------------------------------------------------------------------   
   

//--------------------------------------------------------------------   
   WindowRedraw();                      // Перерисовываем все объекты
   return;
  }
//--------------------------------------------------------------- 9 --
 

Gente, per favore condividete i template pronti e funzionanti (non glitchati) di Expert Advisor, in modo che sia possibile solo cambiare la strategia di trading, con la possibilità di chiudere la posizione aperta a quella opposta se necessario (inversione, ma in modo che Buy/Sell nella condizione non sia attraverso altro, ma con la possibilità di prescrivere separatamente le condizioni:

if condition to buy
{
Opn_B=true; // Open Buy crit.
Cls_S=true; // Close Sell crit. Sell
}
if condition to sell
{
Opn_S=true; // Criterio aperto Sell
Cls_B=true; // Criterio chiuso Buy Acquista il criterio
} ), o TP/SL per chiudere la posizione.

Sto perdendo la testa, sto lottando con questo da un mese. Non riesco a spostare le strategie di trading da Omega a MT, una specie di buffer/ schmuffer, array inverosimili e blocchi di contabilità, apertura/chiusura e contabilità degli errori nel mio Expert Advisor.

Grazie in anticipo a tutti quelli che hanno risposto.

 
Craft:

Gente, per favore condividete i modelli pronti e funzionanti di un EA, in modo da poter cambiare solo la strategia di trading, con la possibilità di chiudere una posizione aperta sul lato opposto (inversione), o da TP/SL, se necessario.

Sto girando intorno alla mia testa con la contabilità degli ordini, i blocchi di apertura/chiusura e la contabilità degli errori.

La risposta è perché ci ho "sudato" sopra per molto tempo - solo se vuoi testare le strategie e cambiarle velocemente, la contabilità degli ordini dovrebbe essere lasciata da parte, così come gli errori dovrebbero essere messi sullo scaffale. Basta copiare quello che ha nel libro di testo e lasciarli stare. Lavora solo con Trade() e Criterion(), se stai seguendo il tutorial di Sergei Kovalev. Criterion() - per trovare punti di ingresso per le vostre strategie, Trade() - per aprire/chiudere posizioni. Lavorare con loro e cambiarli è sufficiente per testare le strategie. E poi, quando sarai bravo a programmare, arriverai alle tue funzioni, perché capirai a cosa serve tutto questo e come funziona...
 
artmedia70:
Risponderò, perché io stesso ho "lottato" con questo per molto tempo - solo per testare le strategie e cambiarle rapidamente, si può lasciare la contabilità degli ordini fuori dall'equazione, e mettere la contabilità degli errori sullo scaffale, anche. Basta copiare quello che ha nel libro di testo e lasciarli stare. Lavora solo con Trade() e Criterion(), se stai seguendo il tutorial di Sergei Kovalev. Criterion() - per trovare punti di ingresso per le vostre strategie, Trade() - per aprire/chiudere posizioni. Lavorare con loro e cambiarli è sufficiente per testare le strategie. E poi, avendo padronanza della programmazione, arriverete alle vostre funzioni, perché capirete a cosa serve tutto questo e come funziona...

Grazie, ho testato tutto, voglio provare il trading via MT per contare veramente gli ordini e le posizioni aperte/chiuse con correzioni di bilancio se necessario.
 
Vinin:

Bisogna guardare il codice. Smontate la logica.

Il codice per l'indicatore più vuoto... dove non c'è nemmeno nulla...

 
#property indicator_separate_window
#property indicator_minimum 1
#property indicator_maximum 10
 
bool initFinished=false;
// добавляем переменную, которая будет запоминать состояние инициализации.
// false - инициализации еще не было
// true - была
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{

   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   ObjectsDeleteAll();
   // удаляем все объекты
   
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   if(initFinished==false)
   {
      IndicatorShortName("Info");
 
      int winID=WindowFind("Info");
   
      if(winID<0)
      {
         // если номер подокна равен -1, то возникла ошибка
         Print("Чёт не могу твоего окошечка найти, пошел я отсюдова");
         return(0);
      }  
//------------------------ Тут можно рисовать ------------------------- 
 
// ----------------------- Но не нужно... ----------------

//------------------------------------------------------------------------- 
      WindowRedraw();      
            
      initFinished=true;
     
   }
   
   return(0);
}
Motivazione: