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

 
ponochka :
안녕하세요! 기능을 사용하여 화면의 스크린샷을 찍습니다.
WindowScreenShot("스크린샷 이름.png",1280,720); 하지만 모든 것을 Files 폴더에 저장하고 저장하려면 다른 폴더의 경로를 지정해야 합니다! 그것을하는 방법?
심볼릭 링크 사용
 

안녕하세요!

처음에 Expert Advisor는 자유 여백으로 비상 잠금 가능성을 구현했습니다.다음은 코드의 일부입니다.

if ( AccountFreeMargin() <= inpMarginLock)

{

gv.isEmergencyLock = 참;

...........................

시간이 지나면서 이것이 그다지 편리하지 않다는 것이 분명해졌습니다.

드로다운을 통해 비상 잠금을 구현하고 싶습니다.

저것들. 예를 들어 보증금이 -100달러에 도달하면 잠금이 발생해야 합니다.

그래서 누군가 가 AccountFreeMargin() 대신 코드에 무언가를 작성할 수 있다면 도움을 요청합니다.

무료 마진이 아니라 보증금이 줄어들 때 긴급 잠금.

미리 감사드립니다!!!!!!

 
안녕하세요, 문제가 있습니다. F9 키를 누르면 주문을 여는 메뉴가 평소와 같이 나타나지만 거기에서 한 쌍의 악기를 선택해야하며 이전과 달리 어떤 악기가 열리고 메뉴가 나타 났는지 알려주십시오. 이 문제를 해결하는 방법.
 
Andrey Sablin :
안녕하세요, 문제가 있습니다. F9 키를 누르면 주문을 여는 메뉴가 평소와 같이 나타나지만 거기에서 한 쌍의 악기를 선택해야하며 이전과 달리 어떤 악기가 열리고 메뉴가 나타 났는지 알려주십시오. 이 문제를 해결하는 방법.

서비스 --> 설정 --> 거래


 

안녕하세요)

도와주세요, 저는 초보자입니다..... 슈퍼시그널 채널과 지그재그 인디케이터의 교차점에서 Expert Advisor를 만들려고 하다가 템플릿을 찾았습니다. 나는 거기에 지표를 던졌지만 주문은 열리지 않았습니다. 여기에 코드의 일부가 있습니다 .... 내가 뭘 잘못하고 있습니까? ...

무효 신호(더블& ar[][], bool& op[], bool& cl[])

{

정수=-1;

더블 업=0.0,dn=0.0;

//---

배열초기화(cl,false);

배열초기화(op,false);

//지그재그 필터 표시기 연결

up=iCustom(_Symbol,tf,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,0);//이름, 설정, 버퍼, BUY에 대한 촛불 시작

dn=iCustom(_Symbol,tf,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,0);//이름, 설정, 버퍼, 판매를 위한 촛불 시작

if(dn==EV)trd=0;

if(위==EV)trd=0; //주석(trd);

// 반전 표시기를 연결하고 트랜잭션을 종료합니다.

up=iCustom(_Symbol,tf,"SuperSignalsChannel_1",SignalGap_1,ShowBars_1,dist_1,0,0);//구매를 위한 촛불 시작

dn=iCustom(_Symbol,tf,"SuperSignalsChannel_1",SignalGap_1,ShowBars_1,dist_1,1,0);//판매를 위한 촛불 시작

if(up>0.0 && up<EV) cl[1]=참;

if(dn>0.0 && dn<EV) cl[0]=참;

위로 = 0.0;

dn=0.0;

// 시장에 진입 하는 주요 지표

스위치(표시등)

{

케이스 SuperSignalsChannel:

up=iCustom(_Symbol,tf,"SuperSignalsChannel",SignalGap,ShowBars,dist_0,1,0);//구매를 위한 촛불 시작

dn=iCustom(_Symbol,tf,"SuperSignalsChannel",SignalGap,ShowBars,dist_0,0,0);//판매를 위한 촛불 시작

부서지다;


PS 포럼 어딘가에 비슷한 주제가 있다면 링크를 남겨주세요.

 


안녕하세요. 여기에 그런 조언자가 있습니다. 제 필요에 맞게 리메이크하려고 노력하고 있지만 아직까지는 그다지 좋지 않습니다. 고가와 저가로 주문이 열리는데 고가+5포인트가 필요합니다. distanceset이 이에 대한 책임이 있다는 것을 알고 있지만 코드에 적용할 수 없습니다. 도움을 바랍니다. 감사해요))))

 //+------------------------------------------------------------------+
//|                                                 
//+------------------------------------------------------------------+


extern string TimeTrade  = "19:00" ;     // Время открытия позиции
extern int     DistanceSet    = 100 ;
extern int TYPE = 0 ;
extern int TP = 50 ;
extern int SL = 4500 ;
extern double lot = 0.1 ;
extern int Magic_Number = 639713 ;

int init(){   return ( 0 );}
int deinit(){   return ( 0 );}
int start()
{
   double SPREAD = MarketInfo ( Symbol (), MODE_SPREAD )* Point ;
   double STOPLEVEL = MarketInfo ( Symbol (), MODE_STOPLEVEL )* Point ;
   double pAsk= Ask +(DistanceSet)* Point ;
   double pBid= Bid -DistanceSet* Point ;

   if (Orders_Total( Magic_Number, Symbol ()) == 0 )
   {
       //Установка ордеров
       if (TYPE<= 0 )
      {
         // Здесь установим STOP-ордера
         if ( iHigh ( Symbol (), PERIOD_D1 , 1 )+SPREAD - STOPLEVEL > Ask )
             OrderSend ( Symbol (), OP_BUYSTOP ,lot, iHigh ( Symbol (), PERIOD_D1 , 1 )+SPREAD, 3 , iHigh ( Symbol (), PERIOD_D1 , 1 ) - SL* Point , iHigh ( Symbol (), PERIOD_D1 , 1 ) + TP* Point , NULL ,Magic_Number, iTime ( Symbol (), PERIOD_D1 , 0 )+ PERIOD_D1 * 60 ,Aqua);
         else Alert ( "Невозможно установить OP_BUYSTOP, цена слишком близка или выше High" );
         if ( iLow ( Symbol (), PERIOD_D1 , 1 ) + STOPLEVEL < Bid )
             OrderSend ( Symbol (), OP_SELLSTOP ,lot, iLow ( Symbol (), PERIOD_D1 , 1 ), 3 , iLow ( Symbol (), PERIOD_D1 , 1 ) + SPREAD + SL* Point , iLow ( Symbol (), PERIOD_D1 , 1 ) + SPREAD - TP* Point , NULL ,Magic_Number, iTime ( Symbol (), PERIOD_D1 , 0 )+ PERIOD_D1 * 60 ,Magenta);
         else Alert ( "Невозможно установить OP_SELLSTOP, цена слишком близка или ниже Low" );
      }
       if (TYPE>= 1 )
      {
         // Здесь установим LIMIT-ордера
         if ( iHigh ( Symbol (), PERIOD_D1 , 1 ) - STOPLEVEL > Bid )
             OrderSend ( Symbol (), OP_SELLLIMIT ,lot, iHigh ( Symbol (), PERIOD_D1 , 1 ), 3 , iHigh ( Symbol (), PERIOD_D1 , 1 ) + SPREAD + SL* Point , iHigh ( Symbol (), PERIOD_D1 , 1 ) + SPREAD - TP* Point , NULL ,Magic_Number, iTime ( Symbol (), PERIOD_D1 , 0 )+ PERIOD_D1 * 60 ,Magenta);
         else Alert ( "Невозможно установить OP_SELLLIMIT, цена слишком близка или выше High" );
         if ( iLow ( Symbol (), PERIOD_D1 , 1 ) + STOPLEVEL < Ask )
             OrderSend ( Symbol (), OP_BUYLIMIT ,lot, iLow ( Symbol (), PERIOD_D1 , 1 )+SPREAD, 3 , iLow ( Symbol (), PERIOD_D1 , 1 ) - SL* Point , iLow ( Symbol (), PERIOD_D1 , 1 ) + TP* Point , NULL ,Magic_Number, iTime ( Symbol (), PERIOD_D1 , 0 )+ PERIOD_D1 * 60 ,Aqua);
         else Alert ( "Невозможно установить OP_BUYLIMIT, цена слишком близка или ниже Low" );
      }
   }
   return ( 0 );
}


//---- Возвращает количество ордеров указанного эксперта(Маджик,Символ) ----//
int Orders_Total( int mn, string sym)
{
   int num_orders= 0 ;
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
   {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderMagicNumber () == mn && sym== OrderSymbol ())
         num_orders++;
   }
   return (num_orders);
}



 
Aleksandr SHablevskiy :


안녕하세요. 여기에 그런 조언자가 있습니다. 제 필요에 맞게 리메이크하려고 노력하고 있지만 아직까지는 그다지 좋지 않습니다. 고가와 저가로 주문이 열리는데 고가+5포인트가 필요합니다. distanceset이 이에 대한 책임이 있다는 것을 알고 있지만 코드에 적용할 수 없습니다. 도움을 바랍니다. 감사해요))))




extern string TimeTrade  = "19:00";    // Время открытия позиции

extern int    DistanceSet    = 100;

extern int    DistanceStopOrder    = 5;

extern int    DistanceLimitOrder   = 5;

extern int TYPE = 0;

extern int TP = 50;

extern int SL = 4500;

extern double lot = 0.1;

extern int Magic_Number = 639713;


int init(){   return(0);}

int deinit(){   return(0);}

int start()

{

   double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*Point;

   double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;

   double pAsk=Ask+(DistanceSet)*Point;

   double pBid=Bid-DistanceSet*Point;


   if(Orders_Total( Magic_Number, Symbol()) == 0 )

   {

      //Установка ордеров

      if(TYPE<=0)

      {

         // Здесь установим STOP-ордера

         if(iHigh(Symbol(),PERIOD_D1,1)+SPREAD - STOPLEVEL > Ask)

            OrderSend(Symbol(),OP_BUYSTOP,lot,iHigh(Symbol(),PERIOD_D1,1)+DistanceStopOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) - SL*Point,iHigh(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYSTOP, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Bid)

            OrderSend(Symbol(),OP_SELLSTOP,lot,iLow(Symbol(),PERIOD_D1,1)-DistanceStopOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iLow(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLSTOP, цена слишком близка или ниже Low");

      }

      if(TYPE>=1)

      {

         // Здесь установим LIMIT-ордера

         if(iHigh(Symbol(),PERIOD_D1,1) - STOPLEVEL > Bid)

            OrderSend(Symbol(),OP_SELLLIMIT,lot,iHigh(Symbol(),PERIOD_D1,1)-DistanceLimitOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iHigh(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLLIMIT, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Ask)

            OrderSend(Symbol(),OP_BUYLIMIT,lot,iLow(Symbol(),PERIOD_D1,1)+DistanceLimitOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) - SL*Point,iLow(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYLIMIT, цена слишком близка или ниже Low");

      }

   }

   return(0);

}



//---- Возвращает количество ордеров указанного эксперта(Маджик,Символ) ----//

int Orders_Total( int mn, string sym)

{

   int num_orders=0;

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

   {

      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

      if(OrderMagicNumber() == mn && sym==OrderSymbol())

         num_orders++;

   }

   return(num_orders);//---

   

  }

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



 
Lehfr :

extern string TimeTrade  = "19:00";    // Время открытия позиции

extern int    DistanceSet    = 100;

extern int    DistanceStopOrder    = 5;

extern int    DistanceLimitOrder   = 5;

extern int TYPE = 0;

extern int TP = 50;

extern int SL = 4500;

extern double lot = 0.1;

extern int Magic_Number = 639713;


int init(){   return(0);}

int deinit(){   return(0);}

int start()

{

   double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*Point;

   double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;

   double pAsk=Ask+(DistanceSet)*Point;

   double pBid=Bid-DistanceSet*Point;


   if(Orders_Total( Magic_Number, Symbol()) == 0 )

   {

      //Установка ордеров

      if(TYPE<=0)

      {

         // Здесь установим STOP-ордера

         if(iHigh(Symbol(),PERIOD_D1,1)+SPREAD - STOPLEVEL > Ask)

            OrderSend(Symbol(),OP_BUYSTOP,lot,iHigh(Symbol(),PERIOD_D1,1)+DistanceStopOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) - SL*Point,iHigh(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYSTOP, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Bid)

            OrderSend(Symbol(),OP_SELLSTOP,lot,iLow(Symbol(),PERIOD_D1,1)-DistanceStopOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iLow(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLSTOP, цена слишком близка или ниже Low");

      }

      if(TYPE>=1)

      {

         // Здесь установим LIMIT-ордера

         if(iHigh(Symbol(),PERIOD_D1,1) - STOPLEVEL > Bid)

            OrderSend(Symbol(),OP_SELLLIMIT,lot,iHigh(Symbol(),PERIOD_D1,1)-DistanceLimitOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iHigh(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLLIMIT, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Ask)

            OrderSend(Symbol(),OP_BUYLIMIT,lot,iLow(Symbol(),PERIOD_D1,1)+DistanceLimitOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) - SL*Point,iLow(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYLIMIT, цена слишком близка или ниже Low");

      }

   }

   return(0);

}



//---- Возвращает количество ордеров указанного эксперта(Маджик,Символ) ----//

int Orders_Total( int mn, string sym)

{

   int num_orders=0;

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

   {

      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

      if(OrderMagicNumber() == mn && sym==OrderSymbol())

         num_orders++;

   }

   return(num_orders);//---

   

  }

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



감사합니다 친절한 사람, 모든 것이 작동합니다))))
 

좋은 오후, 젊은 전문가에게 개가 묻힌 곳을 알려주십시오))

모멘텀을 좀 다시 해보고 테스트해보니 잘 되는거 같던데 어드바이저에게 옮기려고 하면 알 수 없는 엉터리 같은 일이 일어나서 필요한 알고리즘에 따라 계산한 것 같은데 이해가 안가네요 추가 0.0449가 어디에서 왔는지.

입력 int InpMomPeriod=1; // 모멘텀 기간

무효 OnTick()

{

이중 High1 = iCustom(Symbol(), PERIOD_CURRENT ,"INdekators 1.0",InpMomPeriod,0,0);

}

파일:
GBPUSDH11.png  16 kb
GBPUSDH1.png  16 kb
 

안녕하세요 친애하는 프로그래머입니다.
당신에게 낮은 활!

주문을 마감하고 메시지를 보낸 후,

터미널에서 자동 거래를 비활성화해야 합니다(버튼 누름).

사용자가 VPS 서버에서 연결이 끊긴 경우에는 이 작업을 수행하지 않습니다.
사용자가 vps 서버에 연결되고 터미널이 열려 있으면 창이 열리고,
어드바이저가 실행 중이면 버튼 해제 기능이 완벽하게 작동합니다.
그러나 어드바이저를 시작하면 vps 서버에서 연결이 끊어집니다.
Expert Advisor가 일했다는 메시지를 받은 후,
VPS로 돌아가면 버튼이 눌러지지 않은 상태로 유지됩니다.

어드바이저 는 VPS 서버 Windows Server 16에서 작동합니다.

코드의 이 부분은 이 기능을 담당합니다.

if(AutotradeOFF) PressOrReleaseAutotrade();

결론 - 이 기능은 사용자가 VPS 서버에서 연결이 끊긴 경우 작동하지 않습니다.
이 문제를 해결할 수 있는 대안이 있습니까?

무엇이 잘못될 수 있습니까?

문제를 해결하도록 도와주세요.

코드를 첨부합니다.

이 문제를 해결하는 데 도움을 주셔서 미리 감사드립니다!

파일: