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

 
natawik:

Ciao a tutti, aiuto per favore!

Ho un problema come questo. Ho comprato un vpc da mql5 tutto funziona bene, mi sono installato un esperto, ho impostato 8 grafici e impostato un esperto. E ho trasferito il tutto su vpc.

Ho dovuto disinstallare metatrade dal mio computer perché non era mio.

E ora quando entro dal mio computer

Tutto funziona, l'esperto. Funziona, ma non riesco a vederlo per apportare modifiche alle impostazioni. Come posso restituire gli EA e gli orari in modo da poterli gestire dal mio computer?

Grazie!

È necessario salvare i profili per questo caso. Per caricarlo più tardi sotto l'UPU.

 

Chi sa come esportare tutti i dati del rapporto in exel senza distorsioni?

se copio solo alcuni dei dati nella colonna "profitto" viene esportato come data, ad esempio gennaio 94 invece di 1,94

Non importa come provo a salvare, non riesco a liberarmi di questo problema.

 
законопослушный гражданин:

Chi sa come esportare tutti i dati del rapporto in exel senza distorsioni?

se copio solo alcuni dei dati nella colonna "profitto" viene esportato come data, ad esempio gennaio 94 invece di 1,94

Non importa come provo a salvare, non riesco a liberarmi di questo problema.

Prima di caricare, o prima di aprire il file esportato, sostituite il separatore tra la parte intera e la parte frazionaria in Excell con un punto.

 
законопослушный гражданин:

Chi sa come esportare tutti i dati del rapporto in exel senza distorsioni?

se copio solo alcuni dei dati nella colonna "profitto" viene esportato come data, ad esempio gennaio 94 invece di 1,94

Non importa come cerco di salvarlo, non riesco a sbarazzarmi del problema.

Così

 
SGarnov:

Forse si dovrebbe anche tener conto del numero di fermate attivate. Per esempio, l'EA troverà uno stop nella storia, e se ce ne sono due, dovrebbe aggiungerli entrambi a tre o quattro, tutto dipende dall'impostazione esterna "numero di stop loss".

La cosa migliore nel tuo caso, e non solo nel tuo caso, ma nella maggior parte dei casi, invece di rivolgersi alla storia del trading con una ricerca di ordini chiusi, mantenere i ticket degli ordini aperti in un array. Periodicamente, passando attraverso l'array, controlla se questo ordine è stato chiuso da una semplice condizione.

if(OrderCloseTime() != 0) // значит ордер закрылся…

Se l'ordine ha chiuso, può essere selezionato dal ticket e controllare se ha chiuso con un profitto o meno. Puoi anche controllare la distanza dalla posizione aperta allo stop e aggiungere a questa distanza quanto ti permette tua madre.

Dopo tutte queste manipolazioni, dovremmo resettare la dimensione dell'array a 0 e riempirlo nuovamente con i tick degli ordini aperti al momento attuale attraverso il ciclo, aumentando la dimensione dell'array.

 
Vladislav Andruschenko:

devi salvare i profili per questa occasione. Per caricarlo più tardi sotto l'UPU.

E se spengo la VPN e rimetto tutto su e riaccendo la VPN e ti trasferisco tutti i grafici e EA?
Non ci saranno vecchi dati su di te, vero?
 

Ciao

Aiutami a capire il codice

Ho allegato un pezzo di codice che ha delle classi e tutto funziona bene ma

Voglio collegare alcune funzioni delle classi in una funzione separata di mia proprietà e scrive errori

esempio

void OpenHandPosition(int tp)
   {
      string lot=0.01
      bool response = actionTrade.ManageOrderSend(tp, lt, 0, 0, 0, 0, 0);//
   }

funziona così

e questo non funziona

void OpenHandPosition(int tp)
   {

    int stopLoss   = GetStopLossPoints(size);
    int takeProfit = GetTakeProfitPoints();
    bool response = actionTrade.ManageOrderSend(tp, lt , stopLoss, takeProfit, 0, 0, 0);

   }

questa funzione funziona

void StrategyTrader::DoEntryTrade(TradeDirection tradeDir)

e questo non lo fa

OpenHandPosition(int tp)

aiutare

File:
test.mq5  21 kb
 
SGarnov:

Sono giunto alla conclusione che è difficile da implementare, il tuo codice è molto più semplice, più chiaro e più logico, ma ..... in qualche modo non ha senso. La cosa principale è non arrendersi.

Sembra che sia tutto a posto. Provate, chiedete...

//+------------------------------------------------------------------+
//|                                                 SGarnov.v2.1.mq4 |
//|                                           Copyright 2020, DrMak. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, DrMak."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//--- input parameters
input int      T_Profit = 2;     // Коэффициент Take Profit
input int      S_Loss   = 200;   // Уровень Stop Loss
input double   O_Lots   = 0.01;  // Лоты
input int      SL_Count = 2;     // Количество убыточных ордеров
input int      Slippage = 30;    // Проскальзывание
input int      N_Magic  = 888;   // Magic

datetime T_Start;
double sl_price,tp_price,t_profit,s_loss;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 
   Comment("");
//--- 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   t_profit = S_Loss*T_Profit * Point();
   tp_price = NormalizeDouble(t_profit+GetPointLoss(), Digits);
//---
   s_loss   = MathMax(S_Loss, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   sl_price = NormalizeDouble(s_loss, Digits);
//---
   // Удаляем отложенный ордер после профита
   if(CountOrders(-1)==1) DeletePending();
//---
   // Проверяем серию убыточных ордеров
   if(CountOrders(-1)==1&&GetLossOrders()<SL_Count)
     {
      // Устанавливаем отложенный ордер
      SendPending();
     }
//---
   // Проверяем наличие ордеров
   if(CountOrders(-1)>0)
     {
      // Устанавливаем StopLoss/TakeProfit
      ModifyOrder();
     }
//---
   int a=(int)TimeStart();
   int b=GetLossOrders();
   int c=(int)((GetPointLoss()+t_profit)/Point);
   
   Comment("Время начала цикли: ",TimeToStr(a,TIME_SECONDS),"\n",
           "Серия StopLoss ордеров: ",b,"\n",
           "Размер TakeProfita: ",c);
  }
//+------------------------------------------------------------------+
//| Модификация ордера                                               |
//+------------------------------------------------------------------+
void ModifyOrder()
  {
   double op=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderStopLoss()==0)
              {
               if(OrderType()==OP_BUY)
                 {op=OrderOpenPrice();
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), op-sl_price, op+tp_price, OrderExpiration()))
                    {Print("Ордер модифицирован");}
                  else
                    {Print("Ошибка модификации ордера:", GetLastError());}
                 }
               if(OrderType()==OP_SELL)
                 {op=OrderOpenPrice();
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), op+sl_price, op-tp_price, OrderExpiration()))
                    {Print("Ордер модифицирован");}
                  else
                    {Print("Ошибка модификации ордера:", GetLastError());}
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
//|  0 - ордера типа BUY          1 - ордера типа SELL               |
//|  2 - ордера типа BUYLIMIT     3 - ордера типа SELLLIMIT          |
//|  4 - ордера типа BUYSTOP      5 - ордера типа SELLSTOP           |
//|  6 - ордера типа Balance     -1 - Все типы ордеров               |
//+------------------------------------------------------------------+
int CountOrders(int or_ty=-1) 
  {
   int cnt=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==_Symbol)
           {
            if(or_ty<0 || or_ty==OrderType()) cnt++;
           }
        }
     }
   return(cnt);
  }
//+------------------------------------------------------------------+
//| Установка отложенного ордера                                     |
//+------------------------------------------------------------------+
void SendPending()
  {
   double op=0;
   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderStopLoss() != 0)
                 {
                  op=OrderStopLoss();
                  if(OrderSend(_Symbol,OP_SELLSTOP,O_Lots,op,Slippage,0,0,NULL,N_Magic))
                    {Print("Отложенный ордер установлен");}
                  else
                    {Print("Ошибка установки отложеного одера: ", GetLastError());}
                 }
              }
            if(OrderType()==OP_SELL)
              {
               if(OrderStopLoss() != 0)
                 {
                  op=OrderStopLoss();
                  if(OrderSend(_Symbol,OP_BUYSTOP,O_Lots,op,Slippage,0,0,NULL,N_Magic))
                    {Print("Отложенный ордер установлен");}
                  else
                    {Print("Ошибка установки отложеного одера: ", GetLastError());}
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|  Возвращает пункты убытка закрытых ордеров с начала цикла        |
//+------------------------------------------------------------------+
double GetPointLoss()
  {
   double result=0,b=0,s=0;;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(OrderProfit()<0)
                 {
                  if(OrderCloseTime()>=TimeStart())
                    {
                     if(OrderType()==OP_BUY)
                       {
                        b+=OrderOpenPrice()-OrderClosePrice();
                       }
                     if(OrderType()==OP_SELL)
                       {
                        s+=OrderClosePrice()-OrderOpenPrice();
                       }
                    }
                 }
              }
           }
        }
     }
   return(b+s);
  }
//+------------------------------------------------------------------+
//| Удаление отложенного ордера                                      |
//+------------------------------------------------------------------+
void DeletePending()
  {
   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
              {
               if(OrderMagicNumber() == N_Magic)
                 {
                  if(OrderDelete(OrderTicket()))
                    {Print("Отложенный ордер удален");}
                  else
                    {Print("Ошибка удаления отложеного одера: ", GetLastError());}
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Возвращает время начала цикла                                    |
//+------------------------------------------------------------------+
datetime TimeStart()
  {
   datetime ts1=0,ts2=0;
   if(OrdersTotal()!=0)
     {
      for(int i = OrdersTotal() - 1; i >= 0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS))
           {
            if(OrderMagicNumber()!=N_Magic)
              {
               if(OrderType()==OP_BUY || OrderType()==OP_SELL)
                 {
                  if(OrderSymbol()==_Symbol)
                    {
                     if(ts1<OrderOpenTime())
                       {
                        ts1=OrderOpenTime();
                       }
                    }
                 }
              }
           }
        }
      for(int pos=0; pos<OrdersHistoryTotal(); pos++)
        {
         if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
           {
            if(OrderMagicNumber()!=N_Magic)
              {
               if(OrderType()==OP_BUY || OrderType()==OP_SELL)
                 {
                  if(OrderSymbol()==_Symbol)
                    {
                     if(ts2<OrderOpenTime())
                       {
                        ts2=OrderOpenTime();
                       }
                    }
                 }
              }
           }
        }
     }
   return(MathMax(ts1,ts2));
  }
//+------------------------------------------------------------------+
//|  Возвращает кол-во серии убыточных ордеров                       |
//+------------------------------------------------------------------+
int GetLossOrders()
  {
   int cnt=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if((OrderSymbol()==_Symbol))
           {
            if(OrderCloseTime()>=TimeStart())
              {
               if(OrderProfit()<0) cnt++;
              }
           }
        }
     }
   return(cnt);
  }
//+------------------------------------------------------------------+
 
MakarFX:

Sembra che sia tutto a posto. Provate, chiedete...

Grazie per l'aiuto, solo la prossima settimana sarò in grado di scrivere la correttezza dell'EA, oggi è venerdì e non sto più cercando i prezzi di entrata nel mercato.

 
natawik:
E se spengo la VPN e rimetto tutto su, poi riaccendo la VPN e trasferisco tutto a te, la grafica e l'Expert Advisor?
Non ci saranno vecchi dati su di te, vero?
Incontro spesso questi problemi quando imposto un PC, configuro il terminale, poi migro tutto, continuo a lavorare, cambio la grafica, ecc. e poi bam, qualcosa deve essere cambiato.... Devo rifare tutto da capo.