[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 557

 
TG :

안녕하세요, 질문은 주문의 수명에 관한 것입니다. 2분 동안 "살아있는" 주문이 필요합니다

그러한 구성이 오류 3을 제공하는 이유와 해결 방법은 무엇입니까?

주문은 최소 15분 동안 지속되어야 합니다. 덜 필요하면 OrderDelete를 통해 종료하십시오.
 
orb :

알겠습니다. 이렇게 쓰는 것이 더 쉽습니다.

한 번 더 실행되는 동안을 제거하는 방법을 알려주실 수 있습니까?



그런 "더 쉬운"은 없습니다. " Tago에서 Uzbek처럼 성교하여 SOURCE ... "라고 작성하지 않으며 코드에서 작성한 모든 것이 멍청한 조각으로 이해되어야 함을 고려해야합니다. 철.

따라서 옳고 그름의 두 가지 방법이 있습니다.

나는 또한 그것을 올바르게 다시 작성하기 위해 LOT을 이해하고, 규칙을 이해하기 위해 LOYAL을 이해합니다. 글쎄, 당신이 파일에 쓰는 것과 함께 당신의 주제를 얼마나 오랫동안 유지해왔는지 말해주세요. 3주...

 
안녕하세요, 조건을 작성하는 방법을 알려주세요. 열린 위치 에 있는 경우(몇 개인지는 중요하지 않으며 번호 매기기도 필요하지 않음) 하나 이상의 이익으로 마감된 경우 다음 새 위치(하나)를 열 수 있는 방법 ?
 
Stasjan :
안녕하세요, 조건을 작성하는 방법을 알려주십시오. 열린 위치에서 (몇 개인지는 중요하지 않으며 번호 매기기도 필요하지 않음) 하나 또는 여러 개를 이익으로 마감한 경우 다음 새 위치(하나)를 여는 방법은 무엇입니까?


직접 수정:

 //---Поиск последнего отработавшего ордера для открытия очередной позиции ---   
   for (orderIndex = ( OrdersHistoryTotal () - 1 ); orderIndex >= 0 ; orderIndex--)
   {   
       if (! OrderSelect (orderIndex, SELECT_BY_POS, MODE_HISTORY)) { Print ( "Ошибка при доступе к исторической базе (" , GetLastError (), ")" ); continue ;}   
       if (( OrderSymbol () != Symbol ()) || ( OrderMagicNumber () != MagicNumber))   continue ;              
   //------------------------- Принимаем в расчет только ордер, закрытый cамым крайним -----------------------
       if (time< OrderCloseTime ())     //(сравниваем его с хранящимся в пероеменной time) 
        {
         time= OrderCloseTime ();     //если время закрытия ордера больше - ложим его в переменную     
         int lastType = OrderType ();
         double lastLots = OrderLots ();
         double lastProfit = OrderProfit () + OrderSwap ();
         
         // Анализ только что закрывшегося ордера      
         if (lastProfit >= 0.0 )
         {
   //---Ордер закрылся с прибылью - обнуляем счетчик итераций, счетчик для подсчета последовательного убытка позиций колен лавины,
   //---текущий и суммарный убыток и открываемся стартовым лотом по тренду                 
            Sum_Loss= 0 ;    
            Iteration = 0 ; 
             if (Lot(StopLossPips)==false) //Функции  передаем ширину накала 
           {
               Comment ( "Пополните счет. Не хватает средств на минимальный лот. Советник остановлен." );   // Если средств не хватает на мин, то выход
               Print ( "Пополните счет. Не хватает средств на минимальный лот. Lots_New = " ,Lots_New, " AccountFreeMargin() = " , AccountFreeMargin () ); 
                                                                                                         // Если средств не хватает на мин, то выход
               return ( 0 );
           }
            
           // Ордер закрылся с прибылью, открываемся стартовым лотом                     
                                                                         // if (iOpen(Symbol(),signal_period,1)<iClose(Symbol(),signal_period,1))
           if (OsMA_1> 0 && OsMA_2< 0 )
               switch (Filter. Hour )   // торги по времени Да=1/Нет=0
               {
                 case 0 :  WmOrderSend( Symbol (), OP_BUY, Lots_New, Ask, 0 , 0 , "старт после профита" , MagicNumber); break ; 
                 case 1 :   if ( TimeHour ( TimeCurrent ()) >= Start && TimeHour ( TimeCurrent ()) <  End)WmOrderSend( Symbol (), OP_BUY, Lots_New, Ask, 0 , 0 , "старт после профита" , MagicNumber); break ; 
               } 
            
                
           if (OsMA_1< 0 && OsMA_2> 0 )  
               switch (Filter. Hour )   // торги по времени Да=1/Нет=0                    
               {
                 case 0 :  WmOrderSend( Symbol (), OP_SELL, Lots_New, Bid, 0 , 0 , "старт после профита" , MagicNumber); break ;
                 case 1 :   if ( TimeHour ( TimeCurrent ()) >= Start && TimeHour ( TimeCurrent ()) <  End)WmOrderSend( Symbol (), OP_SELL, Lots_New, Bid, 0 , 0 , "старт после профита" , MagicNumber); break ;
               }         
         }
         else
         {
             // Ордер закрылся с убытком - открываемся в ОБРАТНОМ направлении c увеличением объема позиции в соотв-ии с вариантом ММ, если 
             // количество итераций не выше максимального                                 
           if (Iteration <= Max_Iteration && VAR_MM == 0 )                  
               // Последующие лоты открываются по множителю в соответствие с числами ФИБО           
               switch (Iteration)                                   // Заголовок switch 
                   {                                               // Начало тела switch                  
                     case 1 : Lots_New = lastLots * 1 ; lots = lastLots; Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New ); break ; //расчет нового объема       
                     case 2 : Lots_New = lots * 2 ;     Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;   
                     case 3 : Lots_New = lots * 3 ;     Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;      
                     case 4 : Lots_New = lots * 5 ;     Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;  
                     case 5 : Lots_New = lots * 8 ;     Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;     
                     case 6 : Lots_New = lots * 13 ;   Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;      
                     case 7 : Lots_New = lots * 21 ;   Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;     
                     case 8 : Lots_New = lots * 34 ;   Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;         
                     case 9 : Lots_New = lots * 55 ;   Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;           
                     case 10 : Lots_New = lots * 89 ;   Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ; 
                     case 11 : Lots_New = lots * 144 ;   Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;               
                     case 12 : Lots_New = lots * 233 ;   Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;               
                     case 13 : Lots_New = lots * 377 ;   Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;               
                     case 14 : Lots_New = lots * 610 ;   Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;  
                     case 15 : Lots_New = lots * 987 ;   Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;               
                     case 16 : Lots_New = lots * 1597 ; Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   break ;                            
                     default : Lots_New = lots * 2584 ; Print ( "Iteration = " , Iteration, " Lots_New = " , Lots_New );   
                   }                                     // Конец тела switch      
                    
         
            
 // ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...            
                    Lots_New = NormalizeLots(Lots_New);
                     if (lastType == OP_SELL) WmOrderSend( Symbol (), OP_BUY, Lots_New, Ask, 0 , 0 , "итерация" , MagicNumber);
                     if (lastType == OP_BUY)  WmOrderSend( Symbol (), OP_SELL,Lots_New, Bid, 0 , 0 , "итерация" , MagicNumber);                           
    } // к еlse - конец работы после предыдущего убыточного закрытого ордера         
         return ( 0 );
      }     // к  if (time<OrderCloseTime())  - конец анализа и торгов по итогам закрытия самого свежего ордера  
      
// Найден закрытый ордер, но он старый      
       break ;
   }       // выход из цикла по истории ордеров
   
 
FAQ :


그런 "더 쉬운"은 없습니다. " Tago에서 Uzbek처럼 성교하여 SOURCE ... "라고 작성하지 않으며 코드에서 작성한 모든 것이 멍청한 조각으로 이해되어야 함을 고려해야합니다. 철.

따라서 옳고 그름의 두 가지 방법이 있습니다.

나는 또한 그것을 올바르게 다시 작성하기 위해 LOT을 이해하고 규칙을 이해하기 위해 LOYAL을 이해하므로 파일에 쓰는 것과 함께 이 주제를 얼마나 오랫동안 유지해 왔는지 말해주십시오. 3주...

문제가 들어오는 대로 해결하고, 1월 10일부터 프로그래밍을 해왔다는 조언자를 작성했습니다. 4주가 나옵니다. 저는 1월 6일부터 MQL로 프로그래밍을 시도하고 있습니다. 그래서 하지 말자.
 
orb :
문제가 들어오는 대로 해결하고, 1월 10일부터 프로그래밍을 해왔다는 조언자를 작성했습니다. 4주가 나옵니다. 저는 1월 6일부터 MQL로 프로그래밍을 시도하고 있습니다. 그래서 하지 말자.
그리고 일반적으로 원칙이 올바르게 작동했다고 작성해야 합니다. 입력 데이터, 출력 데이터, 메인 블록에 있는 것. 그런 다음 코드를 최적화합니다. 시간이 지남에 따라 그것은 습관, 즉 최적화, 쓰기 능력으로 바뀔 것이며 아마도 나는 당신과 당신이 최적화하지 않는 초보자를 어떻게 던지는지 이해할 것입니다.
 
Roman에게 감사합니다. 하지만 변수의 절반이 어디에서 왔는지 알 수 없습니다. 모든 코드가 아님
 
Stasjan :
Roman에게 감사합니다. 하지만 변수의 절반이 어디에서 왔는지 알 수 없습니다. 모든 코드가 아님
 #include <stdlib.mqh>
#include <stderror.mqh>
//#include <dynamic_channel.mqh>             // динамический канал
//#include <TrailingByFractals_LAVINA.mqh>
//#include <TrailingByFractals.mqh>
//
// Внешние переменные (оптимизируются)
extern string A0 = "Параметры ММ" ;
extern double Lots = 0.1 ;         // Стартовый лот
extern    double MaxRisk = 0 ;       // риск на капитал в %
                                   // рассчитываем объем позиции взависимости от размера стопа, при заданном риске
                                   // например при депо 10 000 риск 1% при стопе 100 пп это будет примерно лот 0.1,
                                   // при стопе 200 пп уже лот должен быть 0.05, для того чтобы риск 1% остался на том же уровне
extern int MaxLoss = 90 ;           // Максимально допустимая просадка в процентах от баланса

extern double StopLoss = 0 ;       // Стоплосс в пипсах - для пятизнака для йены, золота, серебра...
int TakeProfitPips = 0 ;           // Тейкпрофит в пипсах 

extern int Period_ATR = 30 ;       // значение АТР для расчета динамического канала
extern double Mul_TP = 4.0 ;       // целевая прибыль в единицах волатильности (АТР)
extern double Mul_Sl = 0.8 ;       // защитная остановка с последующим переворотом при ее сработке уже 
                                   // увеличенным лотом в единицах волатильности (АТР)

extern int Max_Iteration = 36 ;     // Максимальное количество итераций (ордеров) в мартине 
extern int k = 2 ;                 // с какой итерации тралим
extern int VAR_MM = 0 ;             // используемый вариант усреднения в соотв-ии: множитель с числами ФИБО = 0 / множитель по арифметической прогрессии = 1
                                   // 2 - классический мартин - удвоение предыдущего объема с 3-его усреднения  

extern string Trailing = "---------- Параметры трала" ;
extern int UseTrailing = 1 ;       // Использовать = 1/не использовать = 0 трал  
extern int   type = 0 ;             // вид трала - возможные значения: 0 - простой, 1 - по фракталам, 2 - по теням N свечей.   
extern bool trlinloss = false;     // Тралим только профит для всех видов тралов

extern string A1 = "Параметры простого трала,пo фракталам,теням N баров,каналу,МА,SAR" ;
extern int   TralingStop = 1000 ;   // дистанция простого трала в положительной зоне (пункты)
extern int   indent = 100 ;         // отступ (пунктов) при трале по фракталам, теням N свечей, ценовому каналу, МА,SAR
extern int   bars_n = 10 ;           // количество баров, для трала по их теням (от 1 и больше) или расчета границ канала 
     

extern string A2 = "Таймфрейм, время работы и параметры технических индикаторов" ;
//extern int t_trend_period =6;   // 1-М1, 2-М5, 3-М15, 4-М30, 5-Н1...-для старшего фильтра, внутри которого работаем
extern int s_trend_period = 3 ;     //  PERIOD_M1 1       1 минута
                                   //  PERIOD_M5 5       5 минут
                                   //  PERIOD_M15        15      15 минут
                                   //  PERIOD_M30        30      30 минут
                                   //  PERIOD_H1 60      1 час
                                   //  PERIOD_H4 240     4 часа
                                   //  PERIOD_D1 1440    1 день
                                   //  PERIOD_W1 10080   1 неделя
                                   //  PERIOD_MN1        43200   1 месяц
                                   //  0 (ноль)  0       Период текущего графика 
                                     
extern int Filter. Hour = 0 ;       //  Д-Фильтр: торговля по часам, вне этих часовых рамок новые сделки не открываем, но текущие итеpации завершаем
extern int      Start= 9 ;
extern int       End= 20 ;

// Параметры используемых индикаторов
extern int     Fast            = 5 ;
extern int     Slow            = 39 ;
extern int     Signal          = 20 ;
extern int MagicNumber = 7 ;       // магик                                         
//extern int Period_MA = 20;      // Период МА                          
//extern int Period_ADX = 40;           
//extern int ADXOpenLevel = 12;   
//---- входные параметры индикатора iVAR
//extern int n = 5;
//extern int nBars = 100000;
                                    
//extern  int Iteration = 0;      // счетчик для подсчета итераций, колен лавины
//extern  int Sum_Loss = 0;
                                   
#include <TrailingByFractals_LAVINA.mqh>     // ТРАЛ ПО ФРАКТАЛАМ
#include <TrailingByShadows.mqh>             // ТРАЛ ПО ТЕНЯМ N БАРОВ
//
// Глобальные переменные
//
static datetime prevtime = 0 ;     // по ценам открытия
bool IsExpertFailed = false;
bool IsExpertStopped = false;

int NumberOfTry = 25 ;
int SlipPips = 3 ;

int signal_period;
int trend_period;


bool UseSound = true;
color ColorBuy = Blue ;
color ColorSell = Red ;
string ok.wav;

double   Level_new,  PointValue,
        lots;                       // вспомогательная переменная для расчета нового размера лота при очередной итерации
int Iteration, Counter_Loss, Ticket_at_history; // счетчик для подсчета последовательного убытка позиций колен лавины
//bool Flag_Counter_Loss = false;
double Current_Loss, Sum_Loss;     // текущий и суммарный убыток

int ticket;                         // Номер ордера
double orderLots;                   // Lots   
double orderProfit;                 // Profit
double Price;                       // Цена открытия рыночного ордера
double SL;                         // Значение StopLoss ордера
double TP;                         // Значение TakeProfit ордера


double F1 =   1.0 ;                   // значение цены фрактала вверх (на 2-ом баре)
double F11 = 1.0 ;                   // вспомогательная переменная
double F2 = - 200.0 ;                 // значение цены фрактала вниз (на 2-ом баре)
double F22 =- 200.0 ;                 // вспомогательная переменная  
 
double V_StopLossPips= 0 ;
double V_TakeProfitPips= 0 ;
//double StopLossPips;
int Ticker, Counter;
double channel;
double   StopLossPips;
double Lots_New;                   // Количество лотов для новых ордеров

int time = 0 ;                       // время - для определения факта работы только с последним закрытым ордером      
 
두 기간 사이의 최대 또는 최소 가격 을 결정하는 방법은 무엇입니까? 이를 위한 특별한 기능이 있습니까?
 
RoboT1 :
두 기간 사이의 최대 또는 최소 가격을 결정하는 방법은 무엇입니까? 이를 위한 특별한 기능이 있습니까?
한 간격의 사이클에서 최소/최대를 찾았고 다른 간격에서는 결과 최소/최대를 비교했습니다.