Comecei a estudar a programação MQL5 não há muito tempo. Estudei a documentação e assisti a alguns webinars no youtube. Consegui dar alguns passos humildes :) Há três dias que estou a trabalhar nisso :( Gostaria de pedir aos profissionais alguma ajuda.
O conceito geral é o seguinte: primeiro, obtemos os preços Ask e Bid (utilizei MqlTick e SymbolInfoTick para este fim), depois verificamos se há ou não um negócio aberto ( utilizei PositionsTotal para este fim), se não há posições abertas, abrimos uma posição a preços Ack ou Bid de acordo com uma determinada condição. Nomeadamente, se tivéssemos um negócio anterior para comprar e se revelasse positivo (comprámos baixo e fechámos alto), abriríamos uma nova posição para comprar... Ou seja, em termos gerais :) O problema é que não consigo obter informações sobre qual foi o tipo de última transacção e consequentemente a que preço abriu e a que preço fechou...
Aqui está o código que eu escrevi:
//+------------------------------------------------------------------+//| 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" поместим в переменную PositionInfoMqlTick 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; //Укажем размер нашего лота//+------------------------------------------------------------------+//| Инструкции которые срабатывают один раз при запуске эксперта |//+------------------------------------------------------------------+intOnInit()
{
Trade.SetExpertMagicNumber(MagicNumber); //Занесём наш номер в переменную Trade
Lot=1; //Установим размер нашего лотаreturn(0);
}
//+------------------------------------------------------------------+//| Инструкции которые срабатывают один раз при остановке (закрытии) эксперта |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+------------------------------------------------------------------+//| Инструкции которые срабатывают при каждом новом тике цен |//+------------------------------------------------------------------+voidOnTick()
{
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);
}
Preciso de obter do campo de entrada na janela EA o período de tempo seleccionado pelo utilizador a partir da lista pendente. Como utilizá-lo na função, estou a lutar com ele pelo segundo dia consecutivo, por favor aconselhem-me)!
Pode, por favor, aconselhar como obter informações sobre negócios abertos e fechados em código MQL EA (que preço foi aberto, qual foi o TP e SL)? pelo menos para o último 1.
E existe alguma função ou biblioteca incorporada que devolva um array com n últimos valores de média móvel(de preferência ponderada ou exponencial)?
Pode, por favor, aconselhar como obter informações sobre negócios abertos e fechados em código MQL EA (que preço foi aberto, qual foi o TP e SL)? pelo menos para o último 1.
E existe alguma função ou biblioteca incorporada que devolva um array com n últimos valores de média móvel(de preferência ponderada ou exponencial)?
Por favor especifique sempre para que versão da MQL4 ou MQL5 se dirige a sua pergunta.
Bom dia a todos.
Comecei a estudar a programação MQL5 não há muito tempo. Estudei a documentação e assisti a alguns webinars no youtube. Consegui dar alguns passos humildes :) Há três dias que estou a trabalhar nisso :( Gostaria de pedir aos profissionais alguma ajuda.
O conceito geral é o seguinte: primeiro, obtemos os preços Ask e Bid (utilizei MqlTick e SymbolInfoTick para este fim), depois verificamos se há ou não um negócio aberto ( utilizei PositionsTotal para este fim), se não há posições abertas, abrimos uma posição a preços Ack ou Bid de acordo com uma determinada condição. Nomeadamente, se tivéssemos um negócio anterior para comprar e se revelasse positivo (comprámos baixo e fechámos alto), abriríamos uma nova posição para comprar... Ou seja, em termos gerais :) O problema é que não consigo obter informações sobre qual foi o tipo de última transacção e consequentemente a que preço abriu e a que preço fechou...
Aqui está o código que eu escrevi:
Obrigado antecipadamente pela sua ajuda :)
Afastei-me dos livros em papel há muito tempo, bem como dos livros piratas em formato electrónico. Habituei-me a isso.
Não se pode viver de forma bonita.
Tenho recém-chegados a perguntar-me o que devo ler e não me lembro do que tenho.
Bom dia a todos!
Preciso de obter do campo de entrada na janela EA o período de tempo seleccionado pelo utilizador a partir da lista pendente. Como utilizá-lo na função, estou a lutar com ele pelo segundo dia consecutivo, por favor aconselhem-me)!
Código:
input enum timeFrame {
Hora_1 = 60,
Hora_4 = 240,
Dia_1 = 1440,
Semana_1 = 10080!
};
iADX(currencySelect, THIS IS IS IS IS HOW TO INSTALL SELECTED DATA!, ADXparam, PRICE_CLOSE, MODE_MINUSDI,2)
Obrigado!
Inserir o código correctamente no fórum
Aqui está um exemplo de guião, aplicando a sua enumeração:
Inserir o código correctamente no fórum
Aqui está um exemplo de guião, utilizando a sua listagem:
Obrigado!
E mais, diga-me por favor, existe uma construção no MQ4 como uma matriz associativa com chaves de texto, por exemplo: Array["Aqui está a chave!"]?
Obrigado!
Pode também dizer-me se o MQ4 tem uma construção como uma matriz associativa com chaves de texto, por exemplo: Array["Aqui está a chave!"]?
No vosso exemplo, as chaves são números, e eu referia-me à utilização de cordas como chaves.
Olá!
Pode, por favor, aconselhar como obter informações sobre negócios abertos e fechados em código MQL EA (que preço foi aberto, qual foi o TP e SL)? pelo menos para o último 1.
E existe alguma função ou biblioteca incorporada que devolva um array com n últimos valores de média móvel(de preferência ponderada ou exponencial)?
Olá!
Pode, por favor, aconselhar como obter informações sobre negócios abertos e fechados em código MQL EA (que preço foi aberto, qual foi o TP e SL)? pelo menos para o último 1.
E existe alguma função ou biblioteca incorporada que devolva um array com n últimos valores de média móvel(de preferência ponderada ou exponencial)?