指标: Pan PrizMA CD Phase Sin leverage_72

 

Pan PrizMA CD Phase Sin leverage_72:

计算预期波的相位和

Pan PrizMA CD Phase Sin leverage_72

作者: Aleksey Panfilov

 
怎么用 ,适合多大周期
 
jiangping123:
Как использовать, подходит для какого периода
  • Советник:     Pan PrizMA CD Phase Synthetic EA (4_sloja)
  • Символ:        EURUSD
  • Период:        M1 (2015.04.02 - 2017.04.04)
  • Параметры:  Lot=0,1;   StopLoss=3000 ;  TakeProfit=3000
  • L0_Start=271;  L0_Interval=120 ;    L0_LIN_1_STEP=3 ;    L0_LIN_1_PLECHO=16 ;    L0_LIN_2_PLECHO=0 ;    L0_Synthetic_Channel=0 ;    L0_Weight_Prices=0 ;   L0_Weight_Volume=1 ;
  • L1_Start=181 ;    L1_Interval=120 ;    L1_LIN_1_STEP=3 ;    L1_LIN_1_PLECHO=30 ;    L1_LIN_2_PLECHO=0 ;    L1_Synthetic_Channel=10 ;    L1_Weight_Prices=0 ; L1_Weight_Volume=1 ;
  • L2_Start=241 ;    L2_Interval=120 ;    L2_LIN_1_STEP=3 ;    L2_LIN_1_PLECHO=132 ;    L2_LIN_2_PLECHO=0 ;    L2_Synthetic_Channel=18 ;    L2_Weight_Prices=0 ;   L2_Weight_Volume=1 ;
  • L3_Start=180 ;    L3_Interval=300 ;    L3_LIN_1_STEP=3 ;    L3_LIN_1_PLECHO=740 ;    L3_LIN_2_PLECHO=0 ;    L3_Synthetic_Channel=10 ;    L3_Weight_Prices=0 ;   L3_Weight_Volume=1 ;
  • Multiplikator=1000000 ;    Multiplikator_2=10 ;    InpSignalSMA=9 ;    EA_Magic=12345 ;    EA_Slippage=30; 


//+-------------------------------------------------------------------------+
//|                          Pan PrizMA CD Phase Synthetic EA (4_sloja).mq5 |
//|                                       Copyright 2017, Aleksey Panfilov. |
//|                                                       filpan1@yandex.ru |
//+-------------------------------------------------------------------------+
#property copyright "Copyright 2017, Aleksey Panfilov."
#property link      "filpan1@yandex.ru"
#property version   "1.00"
//#resource "\\Indicators\\Pan PrizMA CD Phase Synthetic.ex5"
//--- входные параметры
input double Lot             = 0.1;           
input int    StopLoss        = 3000; // Stop Loss
input int    TakeProfit      = 3000;// Take Profit

//input double   Koeff             = 1.6;           
// Первый индикатор определяет точки входа
input int      L0_Start         = 241;
input int      L0_Interval      = 120;
input int      L0_LIN_1_STEP    = 3; //L0_Line_1_power
input int      L0_LIN_1_PLECHO  = 132; //L0_Fast_line_1_leverage
input int      L0_LIN_2_PLECHO  = 0;  //L0__Fast_line_2_leverage
      int      L0_base          = 0;
input double   L0_Synthetic_Channel  = 18;
input double   L0_Weight_Prices      = 0;
input double   L0_Weight_Volume      = 1;
// Первый индикатор определяет точки входа
input int      L1_Start         = 0;
input int      L1_Interval      = 370;
input int      L1_LIN_1_STEP    = 4; //L1_Line_1_power
input int      L1_LIN_1_PLECHO  = 30; //L1_Fast_line_1_leverage
input int      L1_LIN_2_PLECHO  = 0;  //L1_Fast_line_2_leverage
      int      L1_base          = 0;
input double   L1_Synthetic_Channel  = 0;
input double   L1_Weight_Prices      = -0.3;
input double   L1_Weight_Volume      = 1.3;
// Второй индикатор определяет основные уровни входа/выхода
input int      L2_Start         = 0;
input int      L2_Interval      = 370;
input int      L2_LIN_1_STEP    = 4; //L2_Line_1_power
input int      L2_LIN_1_PLECHO  = 180; //L2_Fast_line_1_leverage
input int      L2_LIN_2_PLECHO  = 0;  //L2_Fast_line_2_leverage
      int      L2_base          = 0;
input double   L2_Synthetic_Channel  = 0;
input double   L2_Weight_Prices      = -0.3;
input double   L2_Weight_Volume      = 1.3;
// Третий индикатор фильтрует сигналы по тренду
input int      L3_Start         = 0;
input int      L3_Interval      = 370;
input int      L3_LIN_1_STEP    = 4; //L3_Line_1_power
input int      L3_LIN_1_PLECHO  = 1100;//L3_Fast_line_1_leverage
input int      L3_LIN_2_PLECHO  = 0;   //L3_Fast_line_2_leverage
      int      L3_base          = 0;
input double   L3_Synthetic_Channel  = 0;
input double   L3_Weight_Prices      = -0.3;
input double   L3_Weight_Volume      = 1.3;

      int      point_shift_1 = 3;
input int   Multiplikator    = 1000000;
input int   Multiplikator_2  = 10;
input int   InpSignalSMA     = 9;  // Signal SMA Period

input int     EA_Magic       = 12345;    // Magic Number slippage 
input int     EA_Slippage    = 30;       // Slippage from the current price
//--- глобальные переменные
double modified_lot = Lot;

int TOCHKA_VHODA; // 
int LIN_1_INTERVAL=1;  // Далее учитывается в расчете точки входа.
int LIN_2_INTERVAL=1;  //Далее учитывается в расчете точки входа. 
int Pan_PrizMA_CD_Phase_Handle_L0; // хэндл индикатора Pan_PrizMA_CD_Phase_L1
int Pan_PrizMA_CD_Phase_Handle_L1; // хэндл индикатора Pan_PrizMA_CD_Phase_L1
int Pan_PrizMA_CD_Phase_Handle_L2; // хэндл индикатора Pan_PrizMA_CD_Phase_L2
int Pan_PrizMA_CD_Phase_Handle_L3; // хэндл индикатора Pan_PrizMA_CD_Phase_L3

double Phase_Verh_L0[],Phase_Nis_L0[]; // динамические массивы для хранения численных значений фазы выше нуля и ниже нуля.
double Phase_Verh_L1[],Phase_Nis_L1[]; // динамические массивы для хранения численных значений фазы выше нуля и ниже нуля.
double Phase_Verh_L2[],Phase_Nis_L2[]; // динамические массивы для хранения численных значений фазы выше нуля и ниже нуля.
double Phase_Verh_L3[],Phase_Nis_L3[]; // динамические массивы для хранения численных значений фазы выше нуля и ниже нуля.

double LotS;

//====================================================================================================================
//====================================================================================================================
//+------------------------------------------------------------------+
//| Expert initialization function    Секция инициализации советника |
//+------------------------------------------------------------------+
int OnInit()
  {
//Расчитываем точку входа, необходимую для определения числа баров минимальной истории.
    if(TOCHKA_VHODA <= (L0_LIN_1_PLECHO+25)*LIN_1_INTERVAL) TOCHKA_VHODA=(L0_LIN_1_PLECHO+25)*LIN_1_INTERVAL;  
    if(TOCHKA_VHODA <= (L0_LIN_2_PLECHO+25)*LIN_2_INTERVAL) TOCHKA_VHODA=(L0_LIN_2_PLECHO+25)*LIN_2_INTERVAL;  
    if(TOCHKA_VHODA <= (L1_LIN_1_PLECHO+25)*LIN_1_INTERVAL) TOCHKA_VHODA=(L1_LIN_1_PLECHO+25)*LIN_1_INTERVAL;  
    if(TOCHKA_VHODA <= (L1_LIN_2_PLECHO+25)*LIN_2_INTERVAL) TOCHKA_VHODA=(L1_LIN_2_PLECHO+25)*LIN_2_INTERVAL;  
    if(TOCHKA_VHODA <= (L2_LIN_1_PLECHO+25)*LIN_1_INTERVAL) TOCHKA_VHODA=(L2_LIN_1_PLECHO+25)*LIN_1_INTERVAL;  
    if(TOCHKA_VHODA <= (L2_LIN_2_PLECHO+25)*LIN_2_INTERVAL) TOCHKA_VHODA=(L2_LIN_2_PLECHO+25)*LIN_2_INTERVAL;  
    if(TOCHKA_VHODA <= (L3_LIN_1_PLECHO+25)*LIN_1_INTERVAL) TOCHKA_VHODA=(L3_LIN_1_PLECHO+25)*LIN_1_INTERVAL;  
    if(TOCHKA_VHODA <= (L3_LIN_2_PLECHO+25)*LIN_2_INTERVAL) TOCHKA_VHODA=(L3_LIN_2_PLECHO+25)*LIN_2_INTERVAL;  
    if(TOCHKA_VHODA <= (L0_base*2+25))                      TOCHKA_VHODA=(L0_base*2+25);  
    if(TOCHKA_VHODA <= (L1_base*2+25))                      TOCHKA_VHODA=(L1_base*2+25);  
    if(TOCHKA_VHODA <= (L2_base*2+25))                      TOCHKA_VHODA=(L2_base*2+25);  
    if(TOCHKA_VHODA <= (L3_base*2+25))                      TOCHKA_VHODA=(L3_base*2+25);  

//---Получить хэндл индикатора Pan PrizMA CD Phase  
   Pan_PrizMA_CD_Phase_Handle_L0=iCustom(NULL,0,"Pan PrizMA CD Phase Synthetic.ex5",L0_LIN_1_STEP,L0_LIN_1_PLECHO,L0_LIN_2_PLECHO,L0_base,L0_Synthetic_Channel,L0_Weight_Prices,L0_Weight_Volume,Multiplikator,Multiplikator_2,InpSignalSMA);
   Pan_PrizMA_CD_Phase_Handle_L1=iCustom(NULL,0,"Pan PrizMA CD Phase Synthetic.ex5",L1_LIN_1_STEP,L1_LIN_1_PLECHO,L1_LIN_2_PLECHO,L1_base,L1_Synthetic_Channel,L1_Weight_Prices,L1_Weight_Volume,Multiplikator,Multiplikator_2,InpSignalSMA);
   Pan_PrizMA_CD_Phase_Handle_L2=iCustom(NULL,0,"Pan PrizMA CD Phase Synthetic.ex5",L2_LIN_1_STEP,L2_LIN_1_PLECHO,L2_LIN_2_PLECHO,L2_base,L2_Synthetic_Channel,L2_Weight_Prices,L2_Weight_Volume,Multiplikator,Multiplikator_2,InpSignalSMA);
   Pan_PrizMA_CD_Phase_Handle_L3=iCustom(NULL,0,"Pan PrizMA CD Phase Synthetic.ex5",L3_LIN_1_STEP,L3_LIN_1_PLECHO,L3_LIN_2_PLECHO,L3_base,L3_Synthetic_Channel,L3_Weight_Prices,L3_Weight_Volume,Multiplikator,Multiplikator_2,InpSignalSMA);


//--- Нужно проверить, не были ли возвращены значения Invalid Handle
   if(Pan_PrizMA_CD_Phase_Handle_L0<0 || Pan_PrizMA_CD_Phase_Handle_L1<0 || Pan_PrizMA_CD_Phase_Handle_L2<0 || Pan_PrizMA_CD_Phase_Handle_L3<0)
     {
      Alert("Error Creating Handles for indicators - error:",GetLastError(),"!!");
      return(-1);
     }

   return(0);
//==================================================================================================================
  }
  
//+------------------------------------------------------------------+
//| Expert deinitialization function Раздел деинициализации советника|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Освобождаем хэндлы индикаторов
   IndicatorRelease(Pan_PrizMA_CD_Phase_Handle_L0);
   IndicatorRelease(Pan_PrizMA_CD_Phase_Handle_L1);
   IndicatorRelease(Pan_PrizMA_CD_Phase_Handle_L2);
   IndicatorRelease(Pan_PrizMA_CD_Phase_Handle_L3);
  }
  
//+----------------------------------------------------------------------------------------------------------------+
//| Expert tick function  Обработка события NewTick, которое генерируется при приходе новой котировки для символа  |
//+----------------------------------------------------------------------------------------------------------------+
void OnTick()
  {
//---Проверить достаточность баров истории
      if(Bars(_Symbol,_Period)-5<TOCHKA_VHODA)//return(0); 
     {
      Alert("Not enough bars on the chart, the EA will not work!!");
      return;
     }
//==================================================================================================================

//==================================================================================================================
//Ограничение на работу только при открытии бара - соответствует быстрой оптимизации по точкам открытия.

// Для сохранения значения времени бара мы используем static-переменную Old_Time.
// При каждом выполнении функции OnTick мы будем сравнивать время текущего бара с сохраненным временем.
// Если они не равны, это означает, что начал строится новый бар.
/*
   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;

// копируем время текущего бара в элемент New_Time[0]
   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) // ok, успешно скопировано
     {
      if(Old_Time!=New_Time[0]) // если старое время не равно
        {
         IsNewBar=true;   // новый бар
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("We have new bar here ",New_Time[0]," old time was ",Old_Time);
         Old_Time=New_Time[0];   // сохраняем время бара
        }
     }
   else
     {
      Alert("Error in copying historical times data, error =",GetLastError());
      ResetLastError();
      return;
     }

//--- советник должен проверять условия совершения новой торговой операции только при новом баре
   if(IsNewBar==false)
     {
      return;
     }
*/
//=================================================================================================================
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlRates mrate[];           // Будет содержать цены, объемы и спред для каждого бара
   ZeroMemory(mrequest);       // На каждом тике  обнуляемая переменная.

//--- Получить текущее значение котировки в структуру типа MqlTick
   if(!SymbolInfoTick(_Symbol,latest_price))
     {
      Alert("Error getting the latest price quote - error:",GetLastError(),"!!");
      return;
     }

//--- Получить исторические данные последних 3-х баров
   if(CopyRates(_Symbol,_Period,0,3,mrate)<0)
     {
      Alert("Error copying rates/history data - error:",GetLastError(),"!!");
      return;
     }
/**/
//=====================================================================================================================
//=====================================================================================================================
   //---  Используя функцию CopyBuffer, мы копируем по 3 последних новых значения индикаторов в динамические массивы

   if(
      CopyBuffer(Pan_PrizMA_CD_Phase_Handle_L0,4,0,1,Phase_Verh_L0)<0 || CopyBuffer(Pan_PrizMA_CD_Phase_Handle_L0,5,0,1,Phase_Nis_L0)<0 || 
      CopyBuffer(Pan_PrizMA_CD_Phase_Handle_L1,4,0,1,Phase_Verh_L1)<0 || CopyBuffer(Pan_PrizMA_CD_Phase_Handle_L1,5,0,1,Phase_Nis_L1)<0 || 
      CopyBuffer(Pan_PrizMA_CD_Phase_Handle_L2,4,0,1,Phase_Verh_L2)<0 || CopyBuffer(Pan_PrizMA_CD_Phase_Handle_L2,5,0,1,Phase_Nis_L2)<0 || 
      CopyBuffer(Pan_PrizMA_CD_Phase_Handle_L3,4,0,1,Phase_Verh_L3)<0 || CopyBuffer(Pan_PrizMA_CD_Phase_Handle_L3,5,0,1,Phase_Nis_L3)<0)
     {
      Alert("Error copying indicator Buffers - error:",GetLastError(),"!!");
      return;
     }
/*
     Установим индексацию в массивах котировок и индикаторов 
     как в таймсериях
*/
// массив котировок
   ArraySetAsSeries(mrate,true);
// массив значений индикатора фаза верх
   ArraySetAsSeries(Phase_Verh_L0,true);
// массив значений индикатора фаза низ
   ArraySetAsSeries(Phase_Nis_L0,true);
// массив значений индикатора фаза верх
   ArraySetAsSeries(Phase_Verh_L1,true);
// массив значений индикатора фаза низ
   ArraySetAsSeries(Phase_Nis_L1,true);
// массив значений индикатора фаза верх
   ArraySetAsSeries(Phase_Verh_L2,true);
// массив значений индикатора фаза низ
   ArraySetAsSeries(Phase_Nis_L2,true);
// массив значений индикатора фаза верх
   ArraySetAsSeries(Phase_Verh_L3,true);
// массив значений индикатора фаза низ
   ArraySetAsSeries(Phase_Nis_L3,true);

//====================================================================================================================
//====================================================================================================================
//--- есть ли открытые позиции?
   bool Buy_opened=false;  // переменные, в которых будет храниться информация 
   bool Sell_opened=false; // о наличии соответствующих открытых позиций

   if(PositionSelect(_Symbol)==true) // есть открытая позиция
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //это длинная позиция
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // это короткая позиция
        }
     }

//====================================================================================================================
/*
    1. Проверка условий для покупки : Верхняя фаза находится в интервале  от "StartBuy"  до плюс   "IntervalBuy"
       например от 240 градусов до плюс 60 градусов (до 300),  изменяется от  0 до 360 
*/
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   if(
      ((Phase_Verh_L0[0] >= L0_Start  &&  Phase_Verh_L0[0] < L0_Start + L0_Interval  ) || (Phase_Verh_L0[0] >= L0_Start - 360  && Phase_Verh_L0[0] < L0_Start + L0_Interval - 360 )) && // Условие  Phase_Verh_L1[0] >= L1_Start - 360 &&  лишнее, но так легче прочитиать код.
      ((Phase_Verh_L1[0] >= L1_Start  &&  Phase_Verh_L1[0] < L1_Start + L1_Interval  ) || (Phase_Verh_L1[0] >= L1_Start - 360  && Phase_Verh_L1[0] < L1_Start + L1_Interval - 360 )) && // Условие  Phase_Verh_L1[0] >= L1_Start - 360 &&  лишнее, но так легче прочитиать код.
      ((Phase_Verh_L2[0] >= L2_Start  &&  Phase_Verh_L2[0] < L2_Start + L2_Interval  ) || (Phase_Verh_L2[0] >= L2_Start - 360  && Phase_Verh_L2[0] < L2_Start + L2_Interval - 360 )))
     {
      if((Phase_Verh_L3[0] >= L3_Start  &&  Phase_Verh_L3[0] < L3_Start + L3_Interval  ) || (Phase_Verh_L3[0] >= L3_Start - 360  && Phase_Verh_L3[0] < L3_Start + L3_Interval - 360 )  || Sell_opened )
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
//            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        
         if(Sell_opened  &&  ((Phase_Verh_L3[0] >= L3_Start  &&  Phase_Verh_L3[0] < L3_Start + L3_Interval  ) || (Phase_Verh_L3[0] >= L3_Start - 360  && Phase_Verh_L3[0] < L3_Start + L3_Interval - 360 )))
            {      LotS = 2*Lot;      }        
            else           LotS = 1*Lot;

         mrequest.action = TRADE_ACTION_DEAL;                                         // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);                  // последняя цена ask
         mrequest.sl = NormalizeDouble(latest_price.ask - StopLoss *_Point,_Digits);  // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                                   // символ
         mrequest.volume = LotS;                                                      // количество лотов для торговли
         mrequest.magic = EA_Magic;                                                   // Magic Number
         mrequest.type = ORDER_TYPE_BUY;                                              // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                                   // тип исполнения ордера - все или ничего
         mrequest.deviation=EA_Slippage;                                              // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Buy order request could not be completed -error:",GetLastError());
            return;
           }
        }
     }
/*
    2. Проверка условий для продажи : Нижняя фаза + 360 находится в интервале  от "StartSell"  до плюс   "IntervalSell"
       например от -120 + 360 =240 градусов до плюс 60 градусов (до 300 ), изменяется от  -360 до 0 
*/
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   if(
      (( Phase_Nis_L0[0]+360 >= L0_Start && Phase_Nis_L0[0]+360 < L0_Start + L0_Interval) || ( Phase_Nis_L0[0]+360 >= L0_Start - 360 &&  Phase_Nis_L0[0]+360 < L0_Start + L0_Interval-360)) && // Условие  Phase_Nis_L1[0]+360 >= L1_Start - 360 &&  лишнее, но так легче прочитиать код.
      (( Phase_Nis_L1[0]+360 >= L1_Start && Phase_Nis_L1[0]+360 < L1_Start + L1_Interval) || ( Phase_Nis_L1[0]+360 >= L1_Start - 360 &&  Phase_Nis_L1[0]+360 < L1_Start + L1_Interval-360)) && // Условие  Phase_Nis_L1[0]+360 >= L1_Start - 360 &&  лишнее, но так легче прочитиать код.
      (( Phase_Nis_L2[0]+360 >= L2_Start && Phase_Nis_L2[0]+360 < L2_Start + L2_Interval) || ( Phase_Nis_L2[0]+360 >= L2_Start - 360 &&  Phase_Nis_L2[0]+360 < L2_Start + L2_Interval-360)))
     {
      if(( Phase_Nis_L3[0]+360 >= L3_Start && Phase_Nis_L3[0]+360 < L3_Start + L3_Interval) || ( Phase_Nis_L3[0]+360 >= L3_Start - 360 &&  Phase_Nis_L3[0]+360 < L3_Start + L3_Interval-360) || Buy_opened )
        {
         // есть ли в данный момент открытая позиция на продажу?
         if(Sell_opened)
           {
//            Alert("Уже есть позиция на продажу!!!");
            return;    // не добавлять к открытой позиции на продажу
           }
         if(Buy_opened   &&  (( Phase_Nis_L3[0]+360 >= L3_Start && Phase_Nis_L3[0]+360 < L3_Start + L3_Interval) || ( Phase_Nis_L3[0]+360 >= L3_Start - 360 &&  Phase_Nis_L3[0]+360 < L3_Start + L3_Interval-360)))
            {      LotS = 2*Lot;      }        
            else           LotS = 1*Lot;

         mrequest.action = TRADE_ACTION_DEAL;                                         // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);                  // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.bid + StopLoss *_Point,_Digits);  // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.bid - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                                   // символ
         mrequest.volume = LotS;                                                       // количество лотов для торговли
         mrequest.magic = EA_Magic;                                                   // Magic Number
         mrequest.type= ORDER_TYPE_SELL;                                              // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                                   // тип исполнения ордера - все или ничего
         mrequest.deviation=EA_Slippage;                                              // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
           {
            Alert("A Sell order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Sell order request could not be completed -error:",GetLastError());
            return;
           }
        }
     }
//====================================================================================================================

   return;
  }
//+------------------------------------------------------------------+
Файл
 
jiangping123
怎么用,适合多大周期

这是一个具有类似MT5指标的示例