초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 255

 
Mihail Matkovskij # :

tp는 어떻게 계산하나요?

변수 double tp=50에 지정합니다.

 
Roman Epifanov # :

변수 double tp=50에 지정합니다.

 double takeProfit;
takeProfit = NormalizeDouble (Bid - tp * Point (), Digits ()); // TP для Sell
 
Mihail Matkovskij # :

지금 씁니다

2021.12.04 13:56:09.509 TestGenerator: 일치하지 않는 데이터 오류(2021.12.03 23:45의 높은 값 1.13110은 최소 시간 프레임에서 도달하지 않음, 높은 가격 1.13104 불일치)


 //+------------------------------------------------------------------+
//|                                                         repa.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link        " https://www.mql5.com "
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl= 50.0 ,tp= 50.0 ;
   tp = NormalizeDouble (Bid - tp * Point (), Digits ()); // TP для Sell
   double lot= 0.01 ;
   while (i< OrdersTotal ())
   {
   OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
   lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   
   }
   
   ema= iMA ( NULL , 0 , 50 , 0 , MODE_EMA , PRICE_CLOSE , 0 ); //взяли значение средней
   if (Close[ 0 ]<ema)trend= true ; else if (Close[ 0 ]>ema)trend= false ; //определили тренд
   
   if (Close[ 1 ]<Open[ 1 ]) { OrderSend ( Symbol (),OP_SELL,lot,Bid, 2 ,Ask+sl,tp, "Candle sell, Close[0]<MA" );};
   
   
  }
//+------------------------------------------------------------------+
 
Mihail Matkovskij # :

잠시 설정 .. 작동합니다 ..

하지만 정지 수준은 다릅니다 -

하나 2021.09.16 05:59 팔다 하나 0.01 1.18190 51.18192 1.18140 0.00 10000.00


 
Roman Epifanov # :

지금 씁니다

2021.12.04 13:56:09.509 TestGenerator: 일치하지 않는 데이터 오류(2021.12.03 23:45의 높은 값 1.13110은 최소 시간 프레임에서 도달하지 않음, 높은 가격 1.13104 불일치)


 void OnTick ()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl= 50.0 ,tp= 50.0 ;
   double stopLoss, takeProfit, openPrice;
   double lot= 0.01 ;
   while (i< OrdersTotal ())
   {
     OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
     lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   }
   
   ema= iMA ( NULL , 0 , 50 , 0 , MODE_EMA , PRICE_CLOSE , 0 ); //взяли значение средней

   if (Close[ 0 ]<ema)
     trend= true ;
   else if (Close[ 0 ]>ema)
     trend= false ; //определили тренд
    
   takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
   stopLoss = NormalizeDouble(Bid + sl * Point(), Digits()); // SL для Sell
   openPrice = NormalizeDouble(Bid, Digits());

   if (Close[ 1 ]<Open[ 1 ]) {
     OrderSend ( Symbol (), OP_SELL, lot, openPrice, 2 , stopLoss , takeProfit , "Candle sell, Close[0]<MA" );
   }
   
  }

규칙은 모두 온라인이므로 스스로 확인하십시오.

 
Mihail Matkovskij # :

규칙은 모두 온라인이므로 스스로 확인하십시오.

고맙습니다!

 

안녕히 주무세요, 두 번째 주문을 열 때 어드바이저에서 오류가 발생하는 이유를 알려주세요.


고문의 텍스트



//+----------------------매개변수------------------------ -----------+

입력 int TakeProfit = 100; // 이익(포인트)

입력 int StopLoss = 50; // 포인트 손실

입력 더블 로트 = 0.01; // 시작 로트

입력 이중 멀티롯 = 1.95; // 시작 로트 승수

입력 intSlippage=30; // 미끄러짐

입력 정수 MagicNumber = 333 ; // 고유 번호


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

//| 전문가 초기화 기능 |

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

이중tp=0;

이중 sl=0;

int OnInit()

{

tp=NormalizeDouble(TakeProfit*Point(),Digits());

sl=NormalizeDouble(StopLoss*Point(),Digits());

반환(INIT_SUCCESSED);

}


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

//| 전문가 틱 기능 |

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

무효 OnTick()

{

//--loop는 EA가 활성화되었을 때 미결 주문이 있는지 확인하고 계산합니다.

구매 = 0; //BUY 주문 수

int 판매 = 0; //SELL 주문 수


for(int i = OrdersTotal()-1; i>=0; i--)

if(주문선택(i, SELECT_BY_POS,MODE_TRADES))

if(OrderSymbol()==Symbol())

if(OrderMagicNumber()== MagicNumber)

{

if(주문유형()==OP_BUY)

구매++;

if(주문 유형()==OP_SELL)

판매++;

}


//--loop는 EA가 활성화되었을 때 마지막으로 마감된 주문의 데이터를 수신합니다.

정수형=-1; //닫힌 주문 유형

int history_close_orders=0; //닫힌 주문 수

이중 로트 = 0; //마지막으로 마감된 주문의 로트

이중 이익 = 0; //마지막 주문이 마감된 이익

날짜 시간 = 0; //마지막 주문 마감시간


for(int i = OrdersHistoryTotal()-1; i>=0; i--)

if(주문 선택(i, SELECT_BY_POS,MODE_HISTORY))

if(OrderSymbol()==Symbol())

if(OrderMagicNumber()== MagicNumber)

if(OrderCloseTime()>시간)

{

history_close_orders++;

time = OrderCloseTime();//마지막 주문 마감 시간

lot = OrderLots();// 마지막으로 마감된 주문의 로트

type= OrderType();// 마지막으로 마감된 주문의 유형

이익=OrderProfit()*OrderSwap()*OrderCommission();//주문 마감 결과

}

// EA가 작동할 로트를 계산합니다.

이중 lot_Work=0;// 작업 로트


if(history_close_orders==0 || 이익>0)// 마감된 주문이 없거나 마지막 주문이 플러스로 마감된 경우

lot_Work=Lot;// 작업 로트는 초기 로트와 같습니다.


if(history_close_orders>0 && 이익<0) // 마지막 주문이 손실로 마감된 경우

lot_Work=1;//작업 로트는 마지막 주문의 로트에 승수를 곱한 값과 같습니다.


// 첫 번째 구매 주문 열기

if(구매==0 || 이익>0)

{

int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0,"테스트 박람회 전문가 고문",MagicNumber,0,clrGreen);

if(티켓<0)

Print("주문 보내기가 #으로 실패했습니다.",GetLastError());

또 다른

Print("OrderSend 기능이 성공적으로 완료되었습니다.");

}


// 두 번째 및 후속 구매 주문 열기

if(구매==0 && 유형==OP_BUY && 이익<0)

{

int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0,"테스트 박람회 전문가 고문",MagicNumber,0,clrGreen);

if(티켓<0)

Print("주문 보내기가 #으로 실패했습니다.",GetLastError());

또 다른

Print("OrderSend 기능이 성공적으로 완료되었습니다.");

}


// 첫 번째 판매 주문 열기

if(판매==0 || 이익>0)

{

int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0,"테스트 박람회 전문가 고문",MagicNumber,0,clrRed);

if(티켓<0)

Print("주문 보내기가 #으로 실패했습니다.",GetLastError());

또 다른

Print("OrderSend 기능이 성공적으로 완료되었습니다.");

}

// 두 번째 및 후속 구매 주문 열기

if(판매==0 && (유형==OP_SELL && 이익<0))

{

int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0,"테스트 박람회 전문가 고문",MagicNumber,0,clrRed);

if(티켓<0)

Print("주문 보내기가 #으로 실패했습니다.",GetLastError());

또 다른

Print("OrderSend 기능이 성공적으로 완료되었습니다.");

}


//-- 이익실현 및 손절매를 추가하여 주문 수정

for(int i = OrdersTotal()-1; i>=0; i--)

if(주문선택(i, SELECT_BY_POS))

if(OrderSymbol()==Symbol())

if(OrderMagicNumber()== MagicNumber)

{

if(주문유형()==OP_BUY)

{

if(OrderStopLoss()==0 || OrderTakeProfit()==0)

if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl,Digits()),NormalizeDouble(OrderOpenPrice()+tp,Digits()),0,clrGreen))

Print("주문수정 OK!");

또 다른

Print("OrderModify BUY가 #으로 실패했습니다.", GetLastError());

}

if(주문 유형()==OP_SELL)

{

if(OrderStopLoss()==0 || OrderTakeProfit()==0)

if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl,Digits()),NormalizeDouble(OrderOpenPrice()-tp,Digits()),0,clrRed))

Print("주문수정 OK!");

또 다른

Print("OrderModify SELL이 #으로 실패했습니다.", GetLastError());

}

}


}

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


 
i3 프로세서가 탑재된 구형 노트북에는 WinXP 32비트가 여전히 설치되어 있었는데, 이는 MT5에서 지원하지 않습니다. 최근에 메모리를 6GB로 늘렸습니다. MT4와 MT5가 작동하는 64비트 OS를 설치하고 싶습니다. Win7 또는 Win8.1 중 어느 것이 더 바람직합니까?
 
atztek # :
i3 프로세서가 탑재된 구형 노트북에는 WinXP 32비트가 여전히 설치되어 있었는데, 이는 MT5에서 지원하지 않습니다. 최근에 메모리를 6GB로 늘렸습니다. MT4와 MT5가 작동하는 64비트 OS를 설치하고 싶습니다. Win7 또는 Win8.1 중 어느 것이 더 바람직합니까?

 
Andrey Sokolov # :

이 버전은 지속적인 업데이트에 지친 새 노트북에 설치됩니다. 또한 사람들은 구형 노트북에서 8개가 10개보다 더 잘 작동한다고 말합니다. 나는 WinXP를 이전 버전에 남겨두겠지만 MT5는 실행되지 않으며 XP가 볼 수 없는 3GB의 메모리로는 이미 충분하지 않습니다. 그래도 7과 8.1 사이에서 선택한다면 MT4/5에서 최적화를 수행하는 데 어느 것이 더 낫습니까?