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

 

위치 수정 은 어디에 기록됩니까?

손절매와 이익실현을 위한 데이터는 매수 및 매도 조건 이전에 작성되었습니다.

   double Ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );             // лучшее предложение на покупку
   double Bid = SymbolInfoDouble ( _Symbol , SYMBOL_BID );             // лучшее предложение на продажу
   double SL  = NormalizeDouble (StopLoss, _Digits );
   double TP  = NormalizeDouble (TakeProfit, _Digits );
                        
   bool Buy_Condition_1=...;
   bool Buy_Condition_2=...;
   bool Buy_Condition_3=...;
а сам
 bool PositionModify( const string _Symbol , const double SL, const double TP)
   {
       if ( PositionSelect ( _Symbol )== true ) // есть открытая позиция
     {
       if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
         {
     Alert ( "SL!!!" );
     return ;     // закрыл 
         }
   MqlTradeRequest request={ 0 };
   MqlTradeResult   result ={ 0 };
        
       
   mrequest.action= TRADE_ACTION_SLTP ;
   mrequest.symbol= _Symbol ;
   mrequest.magic =EA_Magic; 
   mrequest.sl    =StopLoss;
   mrequest.tp    =TakeProfit;
   OrderSend (mrequest,mresult);
   if (mresult.retcode== 10009 || mresult.retcode== 10008 ) //запрос выполнен или ордер успешно помещен
           {
             Alert ( "Стопка прошла#:" ,mresult.order, "!!" );
           }
         else
           {
             Alert ( "Стопка не прошла - код ошибки:" , GetLastError ());
             return ( false );
           }
   return ( true );
  }
//----------------------------------------------------------------- 
if (Buy_Close_1 || Buy_Close_2)
  
после отсылки ордера на покупку. Пока при компиляции борюсь с "лишними" скобками фигурными. Вопрос дубль 2 - правильно ли я расположил модификацию позиции? И вообще, "классический" ли он имеет код (при условии, что он верный)?
 
papaklass :

코드에 오류가 있습니다.

덕분에. 제거됨.

위치는 어떻습니까?

그런 것은 중괄호를 제자리에 넣으면 컴파일하는 동안 'PositionModify'- 함수 가 전역 범위에서만 선언될 수 있다는 것입니다.

그리고 이번에는 "위치 수정자" 자체가 int OnInit() 이전에 있어야 하고 조건(if)이 구매 섹션 이후에 있어야 한다고 믿습니다.

 
papaklass :

코드를 줘, 무슨 말인지 이해가 안 된다.

추신: 전역 수준에서 PositionModify() 함수를 설명해야 합니다. 함수가 위치한 수준에서 : OnInit() , OnTick(), OnDeinit().

다음은 코드입니다. 판매하는 것과 비슷하기 때문에 구매에만 중지가 있습니다.
파일:
Aim.mq5  13 kb
 
papaklass :

수정했습니다. 오류 없이 컴파일됩니다. 테스터에서 작업을 확인하지 않았습니다. 코드를 읽을 수 없습니다. 수정된 버전에서와 같이 코드 형식 을 지정하는 데 익숙해지십시오.

감사합니다(위치 외에 변경된 사항을 잘 이해하지 못했지만).

2행에서 "SMB"는 무엇을 의미하며 값으로 정의되는 위치는 무엇입니까? _Symbol을 쓸 수 없습니까?

  mrequest.action   = TRADE_ACTION_SLTP ;
      mrequest.symbol   = smb;
      mrequest.magic    = EA_Magic; 
      mrequest.sl       = SL;
      mrequest.tp       = TP;
 

안녕하세요, 터미널이 있는 내 컴퓨터가 꺼져 있는 경우 신호에 의해 주문이 실행되는지(시그널 구독 시) 알려주세요?

 

안녕하세요,

다음을 구현하는 방법을 알려주십시오. Expert Advisor가 시작되고 초기화 중에 (차트 영역에? 다른 곳에?) TextBox와 Button이 그려집니다. Expert Advisor는 틱을 처리합니다. 사용자가 입력하면 TextBox에 값을 입력하고 버튼을 누르면 틱 핸들러가 이 새 데이터를 봅니다.

즉, Windows GUI 요소를 통해 전문가와 사용자 데이터의 대화식 교환을 구성하는 가장 좋은(가장 쉽고 좋은) 방법은 무엇입니까? CChartObjectEdit 및 CChartObjectButton은 죄송합니다. 일종의 "포르노그라피"입니다.


고맙습니다. 질문이 간단하고 찌르면 죄송합니다. 답변이 어디에 있습니까?

 
papaklass :

엄청난.

1. 이제 코드가 컴파일됩니다. 첫 번째 변경 .

컴파일과 성능이 같지 않은 것이 유감입니다)

input int StopLoss= 60 ;       // Stop Loss
input int TakeProfit= 200 ;   // Take Profit
//--- глобальные переменные
double MFI[]; // массив MFI
double DEMA[]; // массив DEMA

 bool PositionModify( const string smb, const double SL, const double TP)
  {       
       MqlTradeRequest mrequest={ 0 };
       MqlTradeResult   mresult ={ 0 };
      
      mrequest.action   = TRADE_ACTION_SLTP ;
      mrequest.symbol   = smb;
      mrequest.sl       = SL;
      mrequest.tp       = TP;
      
       OrderSend ( mrequest, mresult );
       if ( mresult.retcode == 10009 || mresult.retcode == 10008 ) //запрос выполнен или ордер успешно помещен
      {          
         Alert ( "Стопка прошла#:" , mresult.order, "!!" );
      }
       else
      {
         Alert ( "Стопка не прошла - код ошибки:" , GetLastError () );
         return ( false );
      }   
   return ( true );
  }
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
  {
MFIHandle= iMFI ( NULL , 0 ,MFIPeriod,VolumeType);
DEMAHandle= iDEMA ( NULL , 0 ,PeriodDEMA,ShiftDEMA,MFIHandle);
if (BolBandsHandle< 0 || MFIHandle< 0 || DEMAHandle< 0 )
     {
       Alert ( "Ошибка при создании индикаторов - номер ошибки: " , GetLastError (), "!!" );
       return (- 1 );
     }
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
 //+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
 ...
   double Ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );             // лучшее предложение на покупку
   double Bid = SymbolInfoDouble ( _Symbol , SYMBOL_BID );             // лучшее предложение на продажу
   double SL   = NormalizeDouble ( PositionGetDouble ( POSITION_SL ), 4 );
   double TP   = NormalizeDouble ( PositionGetDouble ( POSITION_TP ), 4 );
                        
   bool Buy_Condition_1
   
   bool Buy_Close_1=
   bool Sell_Condition_1=
   
   bool Sell_Close_1=
   
 if (Buy_Condition_1 || Buy_Condition_2)
     { 
       if (Buy_Condition_3 && Buy_Condition_4)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if (Buy_opened)
           {
             Alert ( "Позиция на покупку имеется" );
             return ;     // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL ;     // немедленное исполнение
         mrequest.symbol = _Symbol ;               // символ
         mrequest.magic = EA_Magic;               // Magic Number
         mrequest.volume = Lot;                   // количество лотов для торговли
         mrequest.type = ORDER_TYPE_BUY ;         // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK ;   // тип исполнения ордера - все или ничего

         //--- отсылаем ордер
         OrderSend (mrequest,mresult);
         
         
         
 //------------------------------------------------------------------------------
         PositionModify( Symbol (), NormalizeDouble (Bid - SL* _Point , 4 ),TP* _Point );
 //-------------------------------------------------------------------------------
 
 
 
 
         // анализируем код возврата торгового сервера
         if (mresult.retcode== 10009 || mresult.retcode== 10008 ) //запрос выполнен или ордер успешно помещен
           {
             Alert ( "Buy успешно помещен, тикет ордера #:" ,mresult.order, "!!" );
           }
         else
           {
             Alert ( "Запрос на установку ордера Buy не выполнен - код ошибки:" , GetLastError ());
             return ;
           }
        }
      } 

if (Buy_Close_1 || Buy_Close_2)
     {
       if (Buy_Close_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
           if ( PositionSelect ( _Symbol )== true ) // есть открытая позиция
           {
             if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
                {
           Alert ( "Закрываю ордер BUY!!!" );                  
                                  
         mrequest.action = TRADE_ACTION_DEAL ; // немедленное исполнение
         mrequest.symbol = _Symbol ;           // символ
         mrequest.magic = EA_Magic;           // Magic Number
         mrequest.volume = Lot;               // количество лотов для торговли
         mrequest.type = ORDER_TYPE_SELL ; // ордер на продажу      
         mrequest.type_filling = ORDER_FILLING_FOK ; // тип исполнения ордера - все или ничего
         //--- отсылаем ордер
         OrderSend (mrequest,mresult);
         // анализируем код возврата торгового сервера
         if (mresult.retcode== 10009 || mresult.retcode== 10008 ) //запрос выполнен или ордер успешно помещен
           {
             Alert ( "тикет закрытия Buy #:" ,mresult.order, "!!" );
           }
         else
           {
             Alert ( "Запрос на установку ордера закрытия Buy не выполнен - код ошибки:" , GetLastError ());
             return ;
           }
        }
      }
    }
  }
 ...
     return ; 
} //+------------------------------------------------------------------+end PositionModify
 

글쎄, 그것이 코드가 테스터에서 손절매와 이익을 설정하지만 차트 자체에서는 설정하지 않는 이유입니다!

두근거리기 시작합니다 :)

 
Lester :

글쎄, 그것이 코드가 테스터에서 손절매와 이익을 설정하지만 차트 자체에서는 설정하지 않는 이유입니다!

두근거리기 시작합니다 :)

Lester : 여기에 템플릿을 넣고 내부를 먹고 수정하고 크롤링하는 방법을 보여주었습니다.

https://www.mql5.com/ru/forum/6343/page73

원하지 않으면 변수를 올바르게 고려해야합니다.

Стоплос и тейкпрофит в пункти.*Понт = 0.002 -ето тейк,ну надо и к добавит.

PositionModify( Symbol (), NormalizeDouble (Bid - SL* _Point , 4 ),TP* _Point );

PositionModify( Symbol (), NormalizeDouble ((Bid - SL* _Point ), 4 ), NormalizeDouble ((Bid + TP* _Point ), 4 ));

 
Chino :

안녕하세요, 터미널이 있는 컴퓨터가 꺼져 있는 경우 신호에 의해 주문이 실행되는지(시그널에 가입할 때) 알려주시겠습니까?

개발자들은 그러한 기회를 약속했습니다. 아직 아님.