Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1928

 
Valeriy Yastremskiy #:
L'algoritmo toccato / incrociato - spostato non funziona?

Difficile, vorrei già consegnare qualcosa di adatto. Gli va bene solo visualizzare i livelli e spostare le fermate ai livelli passati, questo è sufficiente. Non mi aspettavo una tale presa. Se non fosse stato via per molto tempo, l'avrei fatto, ma non ora. Non voglio l'arbitraggio, ce l'ho già.

 

se step:=:const, allora mostra semplicemente i livelli con il passo dato dallo stop loss corrente. Cosa potrebbe essere più semplice di questo.

 
Maxim Kuznetsov #:

se step:=:const, allora mostra semplicemente i livelli con il passo dato dallo stop loss corrente. Cosa potrebbe essere più semplice di questo.

Sì algoritmo capisco. Aprire una finestra, scrivere cosa sta succedendo? Condizioni leggermente diverse, da approfondire e scrivere.

P.S. In altre circostanze non lo chiederei.

 
Per favore consigliate chi lo sa, non posso aprire un ordine sulla versione demo scrive che è in coda con un errore generale! Qual è il problema?
 
Maxim Kuznetsov #:

molto probabilmente - ex4 è stato costruito con un vecchio compilatore. Il terminale è stato aggiornato, ma l'EA è un vecchio orfano. Dobbiamo contattare l'autore

La seconda opzione - le firme non corrispondono (o non sono state verificate per motivi tecnici). Dovete solo aspettare che il DNS si aggiorni e la connessione sarà stabilita.

Opzione ipotetica - l'autore viene bandito in modo permanente. Guarda il suo profilo

Per riassumere: prima bisogna fare domande all'autore.

Grazie

 
Vitaly Muzichenko #:

Difficile, vorrei già consegnare qualcosa di adatto. Gli va bene solo visualizzare i livelli e spostare le fermate ai livelli passati, questo è sufficiente. Non mi aspettavo una tale presa. Se non fosse stato via per molto tempo, l'avrei fatto, ma non ora. Non voglio l'arbitraggio, ce l'ho già.

Oninit calcola i livelli e disegna. Per un compito diverso, ma vicino. La tua parte è per i livelli assoluti.

Zy, non ho molto di sbagliato, naturalmente. Ho bisogno di capire come vengono tracciati gli ordini, le posizioni e il trawl, è facile da disegnare, ma quando si raggiunge un livello, bisogna o cambiare il colore del livello, o cancellare la linea orizzontale.
File:
 
Valeriy Yastremskiy #:

OnInit calcola i livelli e disegna. Per un compito diverso, ma fianco a fianco. La tua parte è per i livelli assoluti.

Zy, certamente non ho molto di sbagliato. Devo capire come vengono tracciati gli ordini, le posizioni e il trawl, è facile da disegnare allora. ma quando raggiungi un livello devi o cambiare il colore del livello, o rimuovere la linea orizzontale.

Cosa potrebbe)))) bisogno di aggiungere i flag di trigger a crossfunction. non ho tempo.

input double   PriceOrder=0.0;         // Цена ордера, 
input int TralStep=300;                  // Шаг отслеживания SL  
input int NumberLevels=7;            // Kоличество уровней для выбранного метода ВВЕРХ

input bool FlagShowLine=true;              // Рисовать / не рисовать уровни



//---


double LevelPrice[10];                 // Количество уровней не более 10.
string HLineName[10];
bool Del=true;

string MsgAlert,Tip;

int CurLevel;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---Расчет ценовых уровней

CalculationOfLevels(PriceOrder,TralStep,NumberLevels,Tip);



if(FlagShowLine)
{
ShowLine(Tip);
}
//--- create timer
   EventSetTimer(60);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  
  Comment("");
  
   int obj_total=ObjectsTotal();
      PrintFormat("Всего %d объектов",obj_total);
      for(int i=obj_total-1; i>=0; i--)
        {
         string name=ObjectName(i);
 //        PrintFormat("Объект %d: %s",i,name);
         ObjectDelete(name);
        }
//--- destroy timer
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   CrossingLevel(CurLevel,Tip);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=0.0;
//---

//---
   return(ret);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| Создает горизонтальную линию                                     | 
//+------------------------------------------------------------------+ 
bool HLineCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="HLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 double                price=0,           // цена линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=true,        // на заднем плане 
                 const bool            selection=false,    // выделить для перемещений 
                 const bool            hidden=false,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
  { 
//--- если цена не задана, то установим ее на уровне текущей цены Bid 
   if(!price) 
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID); 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим горизонтальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
//--- установим цвет линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- установим стиль отображения линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- установим толщину линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- включим (true) или отключим (false) режим перемещения линии мышью 
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект 
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection 
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- успешное выполнение 
   return(true); 
  } 
  
  //+------------------------------------------------------------------+
  //| Поиск ближайших уровней                                          |
  //+------------------------------------------------------------------+  
void  ShowModify(string name, string tip, bool del)
  {
  if(del){
ObjectDelete(name);
  }
  if(!del){
 if(tip=="Sell"){
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrGold);
 } 
  if(tip=="Buy"){
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrCoral);
 } 
 }
 }
 
 //+------------------------------------------------------------------+
 //| Мониторинг пересечения уровней                                   |
 //+------------------------------------------------------------------+
 
bool CrossingLevel(int level, string tip)
{
if((tip=="Buy" && Bid > LevelPrice[level]) || (tip=="Sell" && Ask < LevelPrice[level])){
CurLevel=level++ ;
return(true);
}
return(false);
}



void CalculationOfLevels(double priceorder, int trstep, int numberl, string tip){

//---Расчет ценовых уровней

for(int i=0; i<=(numberl); i++){
if(tip=="Buy"){
LevelPrice[i] =  priceorder + trstep*Point;
if(tip=="Sell"){
LevelPrice[i] =  priceorder - trstep*Point;

}
}
CurLevel=1;
}
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ShowLine(string tip)
{
color ClrLine=clrRed;
if(tip=="Buy") ClrLine=clrBlue;
if(tip=="Sell") ClrLine=clrRed;
for(int i=0;i<=(NumberLevels);i++){

//Alert("ShowLine_",ShowLine,"__",LevelPrice[i],"__",ClrLine);
HLineName[i]="LevelPrice_"+(string)i+"_"+(string)LevelPrice[i];

HLineCreate(0,HLineName[i],0,LevelPrice[i],(color)ClrLine,STYLE_SOLID,1);
}
}
File:
ShowLevel.mq4  16 kb
 
Valeriy Yastremskiy #:

Quello che potrei))) bisogno di aggiungere flag di trigger alla funzione incrociata. non ho tempo.

È un po' fuori luogo.

Ho un EA scritto molto tempo fa, ma è un EA che mostra dove le posizioni saranno aperte


Ora ho bisogno di fare un'aggiunta nel codice della rete a strascico per disegnare tali linee dove la rete a strascico sarà attivata.

Il compito è complicato dal fatto che l'EA a strascico è impostato su un grafico e le linee devono essere disegnate su tutti i grafici dove ci sono posizioni aperte.

File:
 
Vitaly Muzichenko #:

Questo è un po' fuori luogo.

Ne ho uno scritto da tempo come questo, ma è un EA con una visualizzazione di dove saranno aperte le posizioni


Ora abbiamo bisogno di fare un'aggiunta nel codice della rete a strascico per disegnare tali linee dove la rete a strascico sarà attivata.

Il compito è complicato dal fatto che l'EA a strascico è impostato su un grafico e le linee devono essere disegnate su tutti i grafici dove ci sono posizioni aperte.

Tutte le finestre sono già aperte o vengono aperte dall'EA man mano che le posizioni emergono? La sfida è trovare un grafico)
 
Valeriy Yastremskiy #:
Tutte le finestre sono già aperte o vengono aperte dall'EA man mano che si presentano le posizioni? La sfida è trovare un grafico)

Presumo che se c'è una posizione, la finestra è aperta.

Motivazione: