초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 389

 

모두에게 좋은 하루.

얼마 전 저는 MQL5용 프로그래밍을 배우기 시작했고 설명서에 익숙해졌고 YouTube에서 몇 가지 웨비나를 시청했습니다. 나는 그럭저럭 몇 가지 겸손한 단계를 밟을 수 있었지만 지금은 이미 3일째 앉아 있는 어려움이 있습니다.

일반적인 개념은 먼저 Ask 및 Bid 가격을 얻은 다음(이를 위해 MqlTick 및 SymbolInfoTick을 사용함) 미결 거래가 있는지 여부(여기에서는 PositionsTotal을 사용함 )를 확인한 다음 미결 포지션이 없는 경우 특정 조건에 따라 Ack 또는 Bid 가격으로 포지션을 엽니다. 즉, 그 전에 구매에 대한 마지막 거래가 이루어졌고 긍정적인 것으로 판명되면(저가 매수하고 고가를 마감), 구매를 위한 새 위치를 열 것입니다 ... 이것은 일반적인 용어입니다 :) 문제는 어떤 것이 극단적인 거래 유형이었는지, 그에 따라 개장한 가격과 마감된 가격에 대한 정보를 얻을 수 없다는 것입니다...

해킹에 성공한 코드는 다음과 같습니다.

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

//|                                                  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);

} 

 

도움을 주신 모든 분들께 미리 진심으로 감사드립니다 :)

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Karputov Vladimir :
나는 오랫동안 종이 책과 전자 형태의 해적에서 멀어졌습니다. 사용.

아름답게 사는 것을 금할 수 없습니다.

새로 온 사람들이 나에게 무엇을 읽을지 묻지만 책에서 무엇을 읽었는지 기억이 나지 않습니다.

 

모두에게 좋은 하루!

어드바이저 창의 입력 필드에서 드롭다운 목록에서 사용자가 선택한 기간을 가져와야 합니다. 함수에 삽입하는 방법, 이틀 연속으로 고생하고 있습니다, 알려주세요)))!

코드:

입력 열거형 timeFrame {
시간_1 = 60,
시간_4 = 240,
Day_1 = 1440
주_1 = 10080

};


iADX(currencySelect, 여기에 선택한 데이터 삽입!, ADXparam, PRICE_CLOSE , MODE_MINUSDI,2)


감사하다!

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

포럼에 코드를 올바르게 붙여넣으십시오.

다음은 열거형을 사용하는 예제 스크립트입니다.

 //+------------------------------------------------------------------+
//|                                                       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 :

포럼에 코드를 올바르게 붙여넣으십시오.

다음은 열거형을 사용하는 예제 스크립트입니다.

고맙습니다!

하지만 MQ4에 텍스트 키가 있는 연관 배열과 같은 구성이 있는지 알려주세요. 예: Array["Here is the key!"]?

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

고맙습니다!

하지만 MQ4에 텍스트 키가 있는 연관 배열과 같은 구성이 있는지 알려주세요. 예: Array["Here is the key!"]?

 //+------------------------------------------------------------------+
//|                                                         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 :
귀하의 예에서 키는 숫자이며 문자열을 키로 사용하는 것을 의미했습니다.
 
Сергей Михеев :
귀하의 예에서 키는 숫자이며 문자열을 키로 사용하는 것을 의미했습니다.
배열 요소 는 인덱스로 액세스됩니다. 인덱스는 정수형 int입니다.
 

안녕하세요!

MQL EA 코드에서 열린 거래와 이미 종료된 거래에 대한 정보를 얻는 방법을 알려주실 수 있습니까? 마지막으로 최소 1개.

그리고 이동 평균 의 마지막 n개 값(더 나은 가중치 또는 지수)이 있는 배열을 반환하는 내장 함수나 라이브러리가 있습니까?

 
Alex317 :

안녕하세요!

MQL EA 코드에서 열린 거래와 이미 종료된 거래에 대한 정보를 얻는 방법을 알려주실 수 있습니까? 마지막으로 최소 1개.

그리고 이동 평균 의 마지막 n개 값(더 나은 가중치 또는 지수)이 있는 배열을 반환하는 내장 함수나 라이브러리가 있습니까?

질문에 대한 MQL4 또는 MQL5 버전을 항상 지정하십시오.
사유: