MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1308

 
Alexandr Sokolov :
전략 테스터 에서 주문 만료 시간은 어디에서 확인할 수 있나요? 기둥 탭에 없습니다.
만료 시간을 어떻게 설정합니까?
 
MakarFX :
만료 시간을 어떻게 설정합니까?
 void Open_Order( ENUM_ORDER_TYPE   Type,
                 double            price,
                 double            sl_price,
                 double            tp_price,
                 datetime          close )
  {
   
   MqlTradeRequest   request;
   MqlTradeResult    result;
   
   ZeroMemory (request);
   ZeroMemory (result);
   
   request.action        = TRADE_ACTION_PENDING ;
   request.magic         = id_number;
   request.symbol        = _Symbol ;
   request.volume        = volume;
   request.price         = price;
   request.sl            = sl_price;
   request.tp            = tp_price;
   request.deviation     = slippage;
   request.type          = Type;
   request.type_filling  = ORDER_FILLING_FOK ;
   request.type_time     = ORDER_TIME_SPECIFIED ;
   request.expiration    = close;
   
   if (! OrderSend (request,result)) Print ( "Error - " ,result.retcode);
   
  }


 
Alexandr Sokolov :


주문에 댓글을 추가하세요. 다른 옵션이 표시되지 않습니다(
 
MakarFX :
주문에 대한 설명에 추가하십시오. 다른 옵션이 표시되지 않습니다(

감사해요

 
포럼에 첫 댓글을 쓰는 중인데 커뮤니티에 특별히 익숙하지 않으니 토마토를 너무 세게 던지지 마세요. 사업에. Expert Advisor를 작성하는 과정에서 모든 미결 주문에 대해 OrdersTotal()이 작동한다는 사실(실제로 논리적임)을 발견했고, "한 번의 닫기 다음 열림"에 대한 조건을 설정하는 경우에 놀랐습니다. 조건에 마법을 설정하고 코드를 복제하는 경우에도 계정의 열린 차트 에 있는 두 명 이상의 고문이 서로 작동하도록 허용하지 않습니다(한 주문이 마감될 때까지 거래 - 다른 주문이 열릴 때까지). 나는 주제에 대해 많은 장소를 검색했습니다. 많은 솔루션이 제공되고 내가 이해하는 한 그것은 쇠약 요소이지만 모든 경우에 도움이되는 것은 없습니다. 연결된 특정 어드바이저에 대해서만 OrdersTotal을 고유화하기 위해 "if... (...)"를 열고 닫을 때 어떤 조건을 설정해야 하며 다른 하나는 (그 OrdersTotal)이 어떤 식으로든 연결되지 않도록 해야 합니다. 모든 주문에 대한 자체 계산을 유지합니다. 고맙습니다.
 
Порт-моне тв :
포럼에 첫 댓글을 쓰는 중인데 커뮤니티에 특별히 익숙하지 않으니 토마토를 너무 세게 던지지 마세요. 사업에. Expert Advisor를 작성하는 과정에서 모든 미결 주문에 대해 OrdersTotal()이 작동한다는 사실(실제로 논리적임)을 발견했고, "한 번의 닫기 다음 열림"에 대한 조건을 설정하는 경우에 놀랐습니다. 조건에 마법을 설정하고 코드를 복제하는 경우에도 계정의 열린 차트 에 있는 두 명 이상의 고문이 서로 작동하도록 허용하지 않습니다(한 주문이 마감될 때까지 거래 - 다른 주문이 열릴 때까지). 나는 주제에 대해 많은 장소를 검색했습니다. 많은 솔루션이 제공되고 내가 이해하는 한 그것은 쇠약 요소이지만 모든 경우에 도움이되는 것은 없습니다. 연결된 특정 어드바이저에 대해서만 OrdersTotal을 고유화하기 위해 "if... (...)"를 열고 닫을 때 어떤 조건을 설정해야 하고 다른 하나는 (해당 OrdersTotal)이 어떤 식으로든 연결되지 않도록 해야 합니다. 모든 주문에 대한 자체 계산을 유지합니다. 고맙습니다.

코드를 첨부하면 오류를 지적할 것입니다.

 
//+----------------------------------------------- --------------------+
//| sova_2bars.mq4 |
//| Copyright 2020, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+----------------------------------------------- --------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#속성 링크 "https://www.mql5.com"
#속성 버전 "1.00"
#속성엄격

extern int 매직 = 64777;
외부 이중 로트 = 0.01;
extern int 미끄러짐 = 3;
외부 정수 TakeProfit = 1600;
extern int 손절매 = 800;
외부 경험 = 0;

double Openone, //첫 번째 캔들의 시가
Opentwo, //두 번째 캔들의 시가
Closeone, //첫 번째 캔들의 종가
Closetwo, //두 번째 캔들의 종가
Lowone, //첫 번째 캔들의 최저가
Lowtwo, //두 번째 양초의 낮은 가격
Lowthree, //세 번째 캔들의 최소 가격
Openthree, //세 번째 캔들의 시가
Closethree, //세 번째 캔들의 종가
CloseOrder, //주문 마감
Highone, //첫 번째 캔들의 높은 가격
Hightwo, //두 번째 양초의 높은 가격
Highthree, //두 번째 캔들의 최고가
Highfour, //두 번째 캔들의 최대 가격
Highfive, //두 번째 캔들의 최대 가격
Highsix, //두 번째 캔들의 최대 가격
Highseven, //두 번째 캔들의 최대 가격
Higheight, //두 번째 캔들의 최대 가격
Lowfour, // 네 번째 캔들의 낮은 가격
Lowfive, // 다섯 번째 양초의 낮은 가격
Lowsix, // 여섯 번째 캔들의 최소 가격
Lowseven, // 일곱 번째 캔들의 저가
Loweight, // 여덟 번째 캔들의 최저 가격
Closefour, // 네 번째 캔들의 종가
오픈 포,
낮은 15,
낮은 25,
SLbuy, TPbuy, SLsell, TPsell, // 네 번째 캔들의 시가
주문오픈가격;
int 티켓, 티켓 닫기;

//+----------------------------------------------- --------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- --------------------+
int OnInit()
{
반환(INIT_SUCCESSED);
}
//+----------------------------------------------- --------------------+
//| 전문적인 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
무효 OnDeinit(const int 이유)
{
}
//+----------------------------------------------- --------------------+
//| 전문가 틱 기능 |
//+----------------------------------------------- --------------------+
무효 OnTick()
{
//--- 필요한 막대의 가격 결정
Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits);
Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits);
Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits);
Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits);
Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits);
Highfive = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits);
Highsix = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits);
Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits);
Higheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits);
Opentwo = NormalizeDouble(iOpen(Symbol(), 기간(), 1), 숫자);
Openthree = NormalizeDouble(iOpen(Symbol(), 기간(), 2), 숫자);
Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), 숫자);
Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits);
Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits);
Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits);
Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits);
Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits);
Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits);
Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits);
Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits);
Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits);
Lowsix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits);
Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits);
Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits);
Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits);

//---- 표시기 - 조건--------------------------------


이중 BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1);
이중 SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1);
이중 LowerBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_LOWER,1);
이중 UpperBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_UPPER,1);
이중 MiddleBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_MAIN,1);
이중 곰 = iBearsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
더블 불스 = iBullsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
이중 파라브 = iSAR(_Symbol,_Period,0.002, 1, 0);

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5);
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5);
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5);
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5);

//-------------함수----------------------------------- ------

if (요청>0 && 입찰>0)
{

if(주문 합계()<1)
if (닫기[1]>열기[1])
if(곰 < -0.00035 && MiddleBB > 묻기)
{
티켓 = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, " 구매 주문 열기", Magic, 0, Blue);
}
if (OrdersTotal()==1)
if(Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
CloseBuyPositions1();
}





//---- 함수의 끝
}
//------------------------------------------------ ----------------------
CloseBuyPositions1() 무효화
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
주문 선택(i, SELECT_BY_POS,MODE_TRADES);
문자열 CurrencyPair=OrderSymbol();
if(_Symbol==통화쌍)
if(주문유형()==OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), 입찰, 3, NULL);
}
}
}




 
 int OrderOfSymbol=CounterOrderTradeType(-1);
 
//-------------функции---------------------------------------

if ( Ask>0 && Bid >0)
   {

 if (OrderOfSymbol<1)
    if (Close[1]>Open[1])
    if(Bears < -0.00035 && MiddleBB > Ask)
         {
    ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue);
         }
         
   
if (OrderOfSymbol==1)
   if(Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
    CloseBuyPositions1();
   } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
   {
   int cnt=0;
   //----
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;
      if(OrderSymbol()!=_Symbol) continue;
      if(order_type == OrderType() || order_type == -1) cnt++;
      }
   //----
   return(cnt);
   }
 
Порт-моне тв :
//+----------------------------------------------- --------------------+
//| sova_2bars.mq4 |
//| Copyright 2020, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+----------------------------------------------- --------------------+

OrdersTotal() 은 Metatrader 4 터미널 의 모든 포지션과 주문의 총 수를 반환합니다.

   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
         if (OrderMagicNumber() == iMagicNumber)
             if (OrderSymbol() == Symbol ())
              {

               }

따라서 주문을 마법과 금융 상품으로 구분할 수 있습니다.

 

@MakarFX 감사합니다.... 컴파일시 이런 오류가 있습니다.

'CounterOrderTradeType' - 함수가 정의되지 않았습니다. 많은 expt trade.mq4에 대한 테스트 48 십구

'CounterOrderTradeType' - 전역, 네임스페이스 또는 클래스 범위에서만 함수 선언이 허용됩니다. 많은 expt trade.mq4에 대한 테스트 141 5


MakarFX
MakarFX
  • www.mql5.com
Добавил тему Окно модификации Доброго времени суток. В терминале, если я дважды щелкаю мышью на линию ордера, то открывается окно модификации. Но если на линии находится цена открытия одного ордера и тейк профит другого, то открывается последний измененный ордер. Уважаемые Профи Добавил тему Нужен индикатор. Кто может написать такое? Я уже...