Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 389

 

Buona giornata a tutti.

Ho iniziato a studiare la programmazione MQL5 non molto tempo fa, ho studiato la documentazione e ho guardato alcuni webinar su youtube. Sono riuscito a fare alcuni passi umili :) Ci sto lavorando da tre giorni :( Vorrei chiedere aiuto ai professionisti.

Il concetto generale è il seguente: prima otteniamo i prezzi Ask e Bid (ho usato MqlTick e SymbolInfoTick per questo scopo), poi guardiamo se c'è un accordo aperto o no (ho usato PositionsTotal per questo scopo), se non ci sono posizioni aperte, apriamo una posizione ai prezzi Ack o Bid secondo una certa condizione. Vale a dire, se abbiamo avuto un trade precedente per comprare e si è rivelato positivo (abbiamo comprato basso e chiuso alto), apriremo una nuova posizione per comprare... Questo è in termini generali :) Il problema è che non posso ottenere informazioni su quale sia stato il tipo di ultima transazione e di conseguenza a quale prezzo si è aperta e a quale prezzo si è chiusa...

Ecco il codice che ho scritto:

//+------------------------------------------------------------------+

//|                                                  SOVETNIK_01.mq5 |

//|                                                   Tokarev Sergey |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Tokarev Sergey"

#property link      "https://www.mql5.com"

#property version   "1.00"



//Мои подключаемые библиотеки

#include<Trade\Trade.mqh>           //Библиотека для структуры "CTrade", она отвечает за выполнение всех торговых операций

#include <Trade\PositionInfo.mqh>   //Библиотека для структуры "CPositionInfo" она выдаёт информацию по всем нашим позициям



//переменные для подключаемых классов и структур опишем тут

CTrade Trade;                 //Значение структуры "CTrade" поместим в переменную Trade

CPositionInfo PositionInfo;   //Значение структуры "CPositionInfo" поместим в переменную PositionInfo

MqlTick last_tick;            //В переменной last_tick будут храниться цены последнего пришедшего тика, для этого используем структуру "MqlTick"

MqlTradeRequest request;

MqlTradeResult result;

//глобальные переменные

double SL;                           //Переменная необходимая для преобразования размера StopLoss в зависимости от типа брокера

double TP;                           //Переменная необходимая для преобразования размера TakeProfit в зависимости от типа брокера

double Ask;                          //Переменная в которой будем хранить значения цены спроса

double Bid;                          //Переменная в которой будем хранить значение цены предложения

int MagicNumber=123456;    //Зададим MagicNumber для идентификации своих ордеров

int N;                     //В переменную N мы занесём кол-во открытых позиций                  

int Lot;                    //Укажем размер нашего лота

//+------------------------------------------------------------------+

//| Инструкции которые срабатывают один раз при запуске эксперта                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   Trade.SetExpertMagicNumber(MagicNumber);        //Занесём наш номер в переменную Trade

   Lot=1;                                                  //Установим размер нашего лота

   return(0);

  }

//+------------------------------------------------------------------+

//| Инструкции которые срабатывают один раз при остановке (закрытии) эксперта                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

  }

//+------------------------------------------------------------------+

//| Инструкции которые срабатывают при каждом новом тике цен                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   SymbolInfoTick(_Symbol,last_tick);   //Заполняем переменную last_tick последними ценами текущего символа, для этого используем "SymbolInfoTick"

   //Обновляем переменные Ask и Bid для дальнейшего использования

   Ask=last_tick.ask;

   Bid=last_tick.bid;

   Print("Цена ПРОДАЖИ = ",Ask);

   Print("Цена ПОКУПКИ = ",Bid);

//Определим существует ли открытая позиция или нет

   N=PositionsTotal();

   Print("Кол-во открытых позиций: ",N); 

   if(N==0)

      {

      //Если позиции нет то определим какая сделка была крайней

      HistorySelect(0,TimeCurrent());        //Загружаем историю наших сделок

      ulong last_deal_ticket;                   //Объявим переменную для тикета последней сделки

      ulong deals=HistoryOrdersTotal();      //Обяъвим переменную "deals" куда выгрузим количество наших сделок в целом из истории

      last_deal_ticket=HistoryDealGetTicket((int)deals-1); //получим тикет крайней сделки

      Print("Ticket крайней сделки: ",last_deal_ticket);

      long deal_type=HistoryDealGetInteger(last_deal_ticket,DEAL_TYPE); //Тут получить должны тип крайней сделки из истории

      Print ("Тип крайней ",deal_type);      

      //Если была на продажу то покупаем

      if (deal_type==BUY)

         {

         //Открываем наш ордер на покупку

         Trade.Buy(Lot,Symbol(),Ask,SL,TP);

         Print("Мы купили по цене: ",Ask);

} 

 

Grazie in anticipo per il vostro aiuto :)

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Karputov Vladimir:
Mi sono allontanato dai libri di carta molto tempo fa, così come dai libri pirata in forma elettronica. Mi ci sono abituato.

Non si può vivere in modo bello.

Ho dei nuovi arrivati che mi chiedono cosa leggere e io non ricordo cosa ho.

 

Buona giornata a tutti!

Ho bisogno di ottenere dal campo di input nella finestra EA il timeframe selezionato dall'utente dall'elenco a discesa. Come faccio a incollarlo nella funzione, ci sto lottando per il secondo giorno di fila, per favore ditemelo)!

Codice:

input enum timeFrame {
Ora_1 = 60,
Ora_4 = 240,
Giorno_1 = 1440,
Settimana_1 = 10080!

};


iADX(currencySelect, THIS IS HOW TO INSTALL SELECTED DATA!, ADXparam, PRICE_CLOSE, MODE_MINUSDI,2)


Grazie!

 
Сергей Михеев:

Inserire correttamente il codice nel forum

Ecco un esempio di script che applica la vostra enumerazione:

//+------------------------------------------------------------------+
//|                                                       Primer.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum timeFrame
  {
   Hour_1 = 60,
   Hour_4 = 240,
   Day_1=1440,
   Week_1=10080
  };
input timeFrame MyTimeFrame=Hour_1;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(MyTimeFrame);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

Inserire correttamente il codice nel forum

Ecco uno script di esempio, che applica il tuo elenco:

Grazie!

E ancora, per favore ditemi, c'è una costruzione in MQ4 come array associativo con chiavi di testo, per esempio: Array["Ecco la chiave!"]?

 
Сергей Михеев:

Grazie!

Inoltre, potreste dirmi se MQ4 ha una costruzione come array associativo con chiavi di testo, per esempio: Array["Ecco la chiave!"]?

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
#define  Number                1
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   int Arr[]={ 12,15,4 };
   Print(Arr[Number]);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:
Nel tuo esempio le chiavi sono numeri e io intendevo usare stringhe come chiavi.
 
Сергей Михеев:
Nel tuo esempio, le chiavi sono numeri, e io intendevo usare stringhe come chiavi.
Gli elementi dell'array sono accessibili per indice. L'indice è un intero di tipo int.
 

Ciao!

Puoi per favore consigliare come ottenere informazioni sui trade aperti e chiusi nel codice MQL EA (quale prezzo è stato aperto, quali erano il TP e lo SL)? almeno per l'ultimo 1.

E c'è qualche funzione o libreria integrata che restituisce un array con n ultimi valori di media mobile(preferibilmente ponderata o esponenziale)?

 
Alex317:

Ciao!

Puoi per favore consigliare come ottenere informazioni sui trade aperti e chiusi nel codice MQL EA (quale prezzo è stato aperto, quali erano il TP e lo SL)? almeno per l'ultimo 1.

E c'è qualche funzione o libreria integrata che restituisce un array con n ultimi valori di media mobile(preferibilmente ponderata o esponenziale)?

Si prega di specificare sempre per quale versione di MQL4 o MQL5 è la vostra domanda.