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

 
존경하는 경비, 누가 알겠습니까.
예를 들어 MT5에서 분석을 위해 웹사이트 또는 일부 시스템으로 데이터를 수신할 수 있는 기회가 있습니다. https://www.mql5.com/ru/docs/integration/python_metatrader5
EA를 사용하지 않고 MT4에서 데이터를 가져오는 동일한 API가 있습니까?
Документация по MQL5: Интеграция / MetaTrader для Python
Документация по MQL5: Интеграция / MetaTrader для Python
  • www.mql5.com
MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
총 이익으로 특정 통화의 주문을 마감하는 기능이 있는 녀석 Tobizh는 두 개의 매수 주문을 엽니다 EURUSD의 경우 USDCHF를 가정해 보겠습니다. 이렇게 하면 지정된 이익에 도달하면 봇이 닫을 수 있습니다. Goko가 가지고 있다면, 저는 코드를 작성하는 방법을 참조하십시오.
 
Tenimagalon :
총 이익으로 특정 통화의 주문을 마감하는 기능이 있는 녀석 Tobizh는 두 개의 매수 주문을 엽니다 EURUSD의 경우 USDCHF를 가정해 보겠습니다. 이렇게 하면 지정된 이익에 도달하면 봇이 닫을 수 있습니다. Goko가 가지고 있다면, 저는 코드를 작성하는 방법을 참조하십시오.

잡다

 double MyProfit= 1000 ; // уровень профита
//+--------------------------------------------------------------------------------------------------------------------+
//| Expert tick function                                                                                               |
//+--------------------------------------------------------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (Open_Pr()>MyProfit)DelOrders();
//---
  }
//+--------------------------------------------------------------------------------------------------------------------+
//|  Суммарный профит в валюте депозита открытых позиций                                                               |
//+--------------------------------------------------------------------------------------------------------------------+
double Open_Pr( string sy= "" )
  { double p = 0 ;
   if (sy == "0" ) sy = Symbol ();
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos,SELECT_BY_POS)== true )
        {
         if (OrderSymbol() == sy || sy == "" ){p+=OrderProfit()+OrderSwap()+OrderCommission();}
        }
     }
   return (p);
  }
//+--------------------------------------------------------------------------------------------------------------------+
//| Функция удаления и закрытия ордеров                                                                                |
//+--------------------------------------------------------------------------------------------------------------------+
void DelOrders()
  {
   while ( true )
     {
       bool find_order= false ;
       //----
       for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
       if ( OrderSelect (pos,SELECT_BY_POS)== true )
       if (OrderSymbol()== _Symbol )
        {
         find_order= true ;
         //----
         if (OrderType()==OP_BUY)
           {
            RefreshRates(); int slip=( int )(((Ask-Bid)/ Point )* 2 );
             if (OrderClose(OrderTicket(),OrderLots(),Bid,slip, clrBlue )== false ){}
           }
         //----
         if (OrderType()==OP_SELL)
           {
            RefreshRates(); int slip=( int )(((Ask-Bid)/ Point )* 2 );
             if (OrderClose(OrderTicket(),OrderLots(),Ask,slip, clrRed )== false ){}
           }
         //----
         if (OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)
         if (OrderDelete(OrderTicket(), clrRed )== false ){}
         //----
         if (OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)
         if (OrderDelete(OrderTicket(), clrBlue )== false ){}
         Alert ( "Все ордера закрыты!" );
        } 
       if (find_order== false ) Alert ( "Нет ордеров!" ); break ;
     } 
  }
//+--------------------------------------------------------------------------------------------------------------------+
 
MakarFX :

잡다

여기요! 내가 코드를 시도한 것 - 어떤 이유로 닫히지 않음

스냅샷 5674

 
SanAlex :

여기요! 내가 코드를 시도한 것 - 어떤 이유로 닫히지 않음


개별이 아닌 총 이익으로 ....
 
SanAlex :

여기요! 내가 코드를 시도한 것 - 어떤 이유로 닫히지 않음


나는 이것을 이렇게 했다 - 작동한다!

 //+------------------------------------------------------------------+
//|                                             MakarFX_MyProfit.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
input string    t2= "------------ Exchange TP SL --------" ; //
input double    InpTProfit       = 10 ;             // Exchange TP уровень профита
input double    InpStopLoss      = 1000000 ;       // Exchange SL
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   ProfitOnTick();
  }
//+------------------------------------------------------------------+
//| Суммарный профит в валюте депозита открытых позиций              |
//+------------------------------------------------------------------+
bool ProfitOnTick( void )
  {
   bool res= false ;
   double PROFIT_BUY= 0.00 ;
   double PROFIT_SELL= 0.00 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) // returns the number of open positions
     {
       if ( OrderSelect (i,SELECT_BY_POS) && OrderSymbol()== Symbol ())
        {
         if (OrderSymbol()== Symbol () && OrderType()==OP_BUY)
           {
            PROFIT_BUY=PROFIT_BUY+ NormalizeDouble (OrderProfit(), 2 );
           }
         if (OrderSymbol()== Symbol () && OrderType()==OP_SELL)
           {
            PROFIT_SELL=PROFIT_SELL+ NormalizeDouble (OrderProfit(), 2 );
           }
        }
     }
   int Close_ticketb= 0 ;
   int totalb= OrdersTotal ();
   int b = 0 ;
   for (b = totalb; b >= 0 ; b--)
     {
       if ( OrderSelect (b,SELECT_BY_POS) && OrderSymbol()== Symbol ())
        {
         //OrderSelect(i,SELECT_BY_POS);
         if (OrderSymbol()== Symbol () && OrderType()==OP_BUY)
           {
             if (PROFIT_BUY<-InpStopLoss || PROFIT_BUY>=InpTProfit)
              {
               Close_ticketb = OrderClose(OrderTicket(),OrderLots(),MarketInfo( Symbol (),MODE_BID), 5 );
               PlaySound ( "ok.wav" );
              }
           }
        }
      res= true ;
     }
   int Close_tickets= 0 ;
   int totals= OrdersTotal ();
   int s = 0 ;
   for (s = totals; s >= 0 ; s--)
     {
       if ( OrderSelect (s,SELECT_BY_POS) && OrderSymbol()== Symbol ())
        {
         if (OrderSymbol()== Symbol () && OrderType()==OP_SELL)
           {
             if (PROFIT_SELL<-InpStopLoss || PROFIT_SELL>=InpTProfit)
              {
               Close_tickets = OrderClose(OrderTicket(),OrderLots(),MarketInfo( Symbol (),MODE_ASK), 5 );
               PlaySound ( "ok.wav" );
              }
           }
        }
      res= true ;
     }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
 
Vladislav Andruschenko :
개별이 아닌 총 이익으로 ....

그리고 거기에 있습니다! 그럼 미안!

이것이 내가 망친 방법입니다

 //+------------------------------------------------------------------+
//| Check  closing                                                   |
//+------------------------------------------------------------------+
bool ProfitTarget( void )
  {
   bool res= false ;
   if ( AccountInfoDouble ( ACCOUNT_EQUITY )>=TargetProfit)
     {
      CloseAllOrders();
       Sleep (SLEEPTIME* 1000 );
      CloseAllOrders();
       ExpertRemove ();
      DeleteChart();
       PlaySound ( "expert.wav" );
      res= true ;
     }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
 
SanAlex :

그리고 거기에 있습니다! 그럼 미안!

이것이 내가 망친 방법입니다

자, 싸울 준비가 되었습니다!

 //+------------------------------------------------------------------+
//|                                             MakarFX_MyProfit.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
#include <stdlib.mqh>
//--- Inputs
input string    t= "------------- Balans Parameters -----" ; //
input string    Template         = "ADX" ;         // Имя шаблона(without '.tpl')
input double    TargetProfit     = 1000000 ;       // Баланс + Прибыль(прибавить к балансу)
input string    t2= "------------ Exchange TP SL --------" ; //
input double    InpTProfit       = 10 ;             // Exchange TP уровень профита
input double    InpStopLoss      = 1000000 ;       // Exchange SL
//---
uint    SLEEPTIME        = 1 ;
bool    CloseOpenOrders  = true ;
double Price[ 2 ];
ENUM_TIMEFRAMES TimeFrame; // Change TimeFrame - Current = dont changed
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   ProfitOnTick();
   ProfitTarget();
  }
//+------------------------------------------------------------------+
//| Суммарный профит в валюте депозита открытых позиций              |
//+------------------------------------------------------------------+
bool ProfitOnTick( void )
  {
   bool res= false ;
   double PROFIT_BUY= 0.00 ;
   double PROFIT_SELL= 0.00 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) // returns the number of open positions
     {
       if ( OrderSelect (i,SELECT_BY_POS) && OrderSymbol()== Symbol ())
        {
         if (OrderSymbol()== Symbol () && OrderType()==OP_BUY)
           {
            PROFIT_BUY=PROFIT_BUY+ NormalizeDouble (OrderProfit(), 2 );
           }
         if (OrderSymbol()== Symbol () && OrderType()==OP_SELL)
           {
            PROFIT_SELL=PROFIT_SELL+ NormalizeDouble (OrderProfit(), 2 );
           }
        }
     }
   int Close_ticketb= 0 ;
   int totalb= OrdersTotal ();
   int b = 0 ;
   for (b = totalb; b >= 0 ; b--)
     {
       if ( OrderSelect (b,SELECT_BY_POS) && OrderSymbol()== Symbol ())
        {
         //OrderSelect(i,SELECT_BY_POS);
         if (OrderSymbol()== Symbol () && OrderType()==OP_BUY)
           {
             if (PROFIT_BUY<-InpStopLoss || PROFIT_BUY>=InpTProfit)
              {
               Close_ticketb = OrderClose(OrderTicket(),OrderLots(),MarketInfo( Symbol (),MODE_BID), 5 );
               PlaySound ( "ok.wav" );
              }
           }
        }
      res= true ;
     }
   int Close_tickets= 0 ;
   int totals= OrdersTotal ();
   int s = 0 ;
   for (s = totals; s >= 0 ; s--)
     {
       if ( OrderSelect (s,SELECT_BY_POS) && OrderSymbol()== Symbol ())
        {
         if (OrderSymbol()== Symbol () && OrderType()==OP_SELL)
           {
             if (PROFIT_SELL<-InpStopLoss || PROFIT_SELL>=InpTProfit)
              {
               Close_tickets = OrderClose(OrderTicket(),OrderLots(),MarketInfo( Symbol (),MODE_ASK), 5 );
               PlaySound ( "ok.wav" );
              }
           }
        }
      res= true ;
     }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
//| Check  closing                                                   |
//+------------------------------------------------------------------+
bool ProfitTarget( void )
  {
   bool res= false ;
   if ( AccountInfoDouble ( ACCOUNT_EQUITY )>=TargetProfit)
     {
      CloseAllOrders();
       Sleep (SLEEPTIME* 1000 );
      CloseAllOrders();
       ExpertRemove ();
      DeleteChart();
       PlaySound ( "expert.wav" );
      res= true ;
     }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void CloseAllOrders( void )
  {
   int iOrders= OrdersTotal ()- 1 , i;
   if (CloseOpenOrders)
     {
       for (i=iOrders; i>= 0 ; i--)
        {
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) && (OrderType()<=OP_SELL) && GetMarketInfo() &&
            !OrderClose(OrderTicket(),OrderLots(),Price[ 1 -OrderType()], 0 ))
             Print (OrderError());
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
           {
             if (OrderDelete(OrderTicket()))
               Print (OrderError());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Function..: OrderError                                           |
//+------------------------------------------------------------------+
string OrderError( void )
  {
   int iError= GetLastError ();
   return ( StringConcatenate ( "Order:" ,OrderTicket(), " GetLastError()=" ,iError, " " ,ErrorDescription(iError)));
  }
//+------------------------------------------------------------------+
//| Function..: GetMarketInfo                                        |
//+------------------------------------------------------------------+
bool GetMarketInfo( void )
  {
   RefreshRates();
   Price[ 0 ]=MarketInfo(OrderSymbol(),MODE_ASK);
   Price[ 1 ]=MarketInfo(OrderSymbol(),MODE_BID);
   double dPoint=MarketInfo(OrderSymbol(),MODE_POINT);
   if (dPoint== 0 )
       return ( false );
   return (Price[ 0 ]> 0.0 && Price[ 1 ]> 0.0 );
  }
//+------------------------------------------------------------------+
//| start function                                                   |
//+------------------------------------------------------------------+
void DeleteChart( void )
  {
   long currChart,prevChart= ChartFirst ();
   int i= 0 ,limit= 100 ;
   bool errTemplate;
   while (i<limit)
     {
      currChart= ChartNext (prevChart);
       if (TimeFrame!= PERIOD_CURRENT )
        {
         ChartSetSymbolPeriod (prevChart, ChartSymbol (prevChart),TimeFrame);
        }
      errTemplate= ChartApplyTemplate (prevChart,Template+ ".tpl" );
       if (!errTemplate)
        {
         Print ( "Error " , ChartSymbol (prevChart), "-> " , GetLastError ());
        }
       if (currChart< 0 )
         break ;
       Print (i, ChartSymbol (currChart), " ID =" ,currChart);
      prevChart=currChart;
      i++;
     }
  }
//+------------------------------------------------------------------+
 
SanAlex :

자, 싸울 준비가 되었습니다!

왜 "화학요법"입니까?

여기에 원하는 기호를 삽입하십시오.

Open_Pr( Symbol ())

그리고 모든 것이 잘 될 것입니다

PS Sasha, 당신은 스왑과 커미션을 고려하지 않았습니다

 

마카르FX :

왜 "화학요법"입니까?

여기에 원하는 문자를 삽입하십시오

그리고 모든 것이 잘 될 것입니다

PS Sasha, 당신은 스왑과 커미션을 고려하지 않았습니다

나는 어떻게 든 그런 설정에 익숙해졌습니다. 그러나 수수료와 스왑에 관해서는 이것은 모두 말도 안되고 이익은 나에게 중요합니다. 나는 100을 설정하고 나를 위해 90을 닫고 이것도 좋습니다. 그러나 때로는 110을 닫습니다.

그것은 어떤 움직임과 브로커가 닫히는 방식에 달려 있습니다. 그러나 기능은 설정에서 주어진 (합)에서 트리거됩니다.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\

예를 들어 설정 5에 입력했습니다. 5.20을 닫았습니다.

스냅샷 567469

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

또는 여기 또 다른 예가 있습니다. 전문가가 있는 모든 쌍( 모두 동일한 설정을 가짐 )에 대해 총 70,000의 이익을 위해 모든 것을 마감하도록 설정했습니다.

스냅샷 777469

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

내가 의심하는 것 - 모든 사람이 그것이 무엇인지 이해하는 것은 아닙니다. - 총 이익의 관점에서 이것은 한 가지입니다 - 그러나 각 쌍에 대한 이익도 있습니다. 따라서 각 쌍에 전문가를 설치해야 합니다.

이와 같이 !!!

스냅샷 777469 예

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

또 다른 트릭은 무엇입니까? 함수가 총 이익에 대해 작동할 때 모든 열린 차트의 템플릿을 한 번에 변경합니다.

자신만의 템플릿을 만들고 이름을 지정할 수 있습니다. 전문가를 새 합계 또는 원하는 대로 저장하여