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

 

모두를 환영합니다!

이 문제를 도와주세요. 새 막대 가 나타날 때 표시기를 강제로 다시 그릴 수 없습니다(간격 D). 피

 //+------------------------------------------------------------------+
//|                                                 Demark Lines.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 2        // Количество буферов
#property indicator_color1 Green     // Цвет первой линии
#property indicator_color2 Red       // Цвет второй линии

double Buf_UP[],Buf_DN[];             // Объявление массивов (под буферы индикатора)

extern int History= 21 ;         // Колич.баров в расчётной истории
extern int M= 3 ;           // начальный бар с которого начинаем поиск фракталов в цикле.
int     i,k;                 // номера баров в циклах.
int     Vnf3,Vnf2,Vnf1;     // номера реперных фракталов (1-ый справа на графике на нисходящем тренде).
int     VnfL3,VnfL2,VnfL1;   // номера реперных фракталов (1-ый справа на графике на восходящем тренде).
int     VFN,VFNL;           // счетчик найденных фракталов.
int     Md,MdL;             // счетчики кол-ва модификаций
int counted_bars;
double VMF1,VMF2;     // промежуточные значения верхних фракталов на нисходящем тренде.
double VMFL1,VMFL2;   // промежуточные значения нижних фракталов на восходящем тренде.
double VlFl_L;             // Min значение ближайшего нижнего фрактала на тренде вниз
double VlFl_H;             // Max значение ближайшего верхнего фрактала на тренде вверх
datetime tim1_L;           // Время ближайшего нижнего фрактала после нисходящего тренда 
datetime timL1_H;           // Время ближайшего верхнего фрактала после восходящего тренда 

datetime tim1,tim2,tim3;   // время для построения линий вилки Чувашова.
datetime timL1,timL2,timL3; // время для построения линий вилки Чувашова.

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexBuffer ( 0 ,Buf_UP);         // Назначение массива буферу
   SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 1 ); // Стиль линии
   SetIndexBuffer ( 1 ,Buf_DN);         // Назначение массива буферу
   SetIndexStyle ( 1 , DRAW_LINE , STYLE_SOLID , 1 ); // Стиль линии
   
   counted_bars= IndicatorCounted ();
   return ;                           // Выход из спец. ф-ии init()

  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int limit=counted_bars;
  counted_bars= IndicatorCounted ();
   if (counted_bars!=limit)
      { int Razmer= ArraySize (Buf_DN);
       for (i=Razmer;i>= 0 ;i--)
         {Buf_DN[i]= 0 ;
         }
         Razmer= ArraySize (Buf_UP);
         for (i=Razmer;i>= 0 ;i--)
         {Buf_UP[i]= 0 ;
         }
       }  
//----
   for (i= 2 ;i<=History;i++)
    { //цикл
     if (High[i]>High[i+ 1 ] &&High[i]>High[i- 1 ]&&High[i]>Close[i- 2 ])
     { //фрактал
      VFN++;           // счетчик найденного фрактала.
       // ------------------------------------------------------------+
       if (VFN== 1 )       // если 1-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
        { // f1
           Vnf1=i;         // запоминаем номер Max бара найденного фрактала.
           VMF1=High[i];   // запоминаем Max значение 1-ого найденного фрактала.
           tim1= iTime ( NULL , 0 ,i);         // запоминаем время 1-ой опорной точки.
         } //-f1
     // --------------------------------------------------------------+
     if (VFN== 2 )         // если 2-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
      { // f2
          VMF2=High[i];     // запоминаем Max значение 2-ого найденного фрактала.
           if (VMF2>VMF1)     // если Max значение 2-го фрактала больше 1-го (т.е. направлена вниз),
            {
              Vnf2=i;       // запоминаем номер Max бара найденного фрактала.
              tim2= iTime ( NULL , 0 ,i);       // запомним время 2-ой опорной точки.
            }
             else VFN=VFN- 1 ;
       } //-f2
     // --------------------------------------------------------------+
   
    

// ------------------------------------------------------------------+
   if (VFN== 2 ) break ; // найдены все 2 фрактала, выходим из цикла.
// ------------------------------------------------------------------+ 
    } //-фрактал                      
   } //-цикл 
//----
 //int k=0;
   
  
  


for (i= 2 ;i<=History;i++)
    { //цикл
     if (Low[i]<Low[i+ 1 ] &&Low[i]<Low[i- 1 ]&&Low[i]<Close[i- 2 ])
     { //фрактал
      VFNL++;           // счетчик найденного фрактала.
       // ------------------------------------------------------------+
       if (VFNL== 1 )       // если 1-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
        { // f1
           VnfL1=i;         // запоминаем номер Max бара найденного фрактала.
           VMFL1=Low[i];   // запоминаем Max значение 1-ого найденного фрактала.
           
           timL1= iTime ( NULL , 0 ,i);         // запоминаем время 1-ой опорной точки.
         } //-f1
     // --------------------------------------------------------------+
     if (VFNL== 2 )         // если 2-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
      { // f2
          VMFL2=Low[i];     // запоминаем Max значение 2-ого найденного фрактала.
           if (VMFL2<VMFL1)     // если Max значение 2-го фрактала больше 1-го (т.е. направлена вниз),
            {
              VnfL2=i;       // запоминаем номер Max бара найденного фрактала.
              timL2= iTime ( NULL , 0 ,i);       // запомним время 2-ой опорной точки.
            }
             else VFNL=VFNL- 1 ;
       } //-f2
     // --------------------------------------------------------------+

// ------------------------------------------------------------------+
   if (VFN== 2 ) break ; // найдены все 2 фрактала, выходим из цикла.
// ------------------------------------------------------------------+ 
    } //-фрактал                      
   } //-цикл 

 //_________________________________Отрисовка индикатора_________________________________________________
  
   if (Vnf1<VnfL1&&Vnf2!= 0 )               // если ближайший фрактал - вверх
 
  { int k=Vnf2;
   for (i=Vnf2;i>= 0 ;i--)
    {
     Buf_DN[i]= EquationDirect(Vnf2, VMF2, Vnf1,VMF1,k);
     k--;
    }}
   if (VnfL1<Vnf1&&VnfL2!= 0 )       //если ближайший фрактал - вниз
 
 {k=VnfL2;
   for (i=VnfL2;i>= 0 ;i--)
    {
     Buf_UP[i]= EquationDirect(VnfL2, VMFL2, VnfL1,VMFL1,k);
     k--;
    }}
 //_____________________________________________________________________________________________________
    

   return ( 0 );
  }
//+------------------------------------------------------------------+


  
   double EquationDirect( double x1, double y1, double x2, double y2, double x) //прямая линия
   {
if (x2==x1) return (y1);
return ((y2-y1)/(x2-x1)*(x-x1)+y1);}

수동으로 다시 시작해야 합니다.

 
phh200400 :
zlliot 파도에 대한 지표를 다운로드 할 수 있습니까?

물론 당신은 할 수. 찾아서 다운로드해야 합니다.
 
Google에서 검색 문자열:
질리엇 웨이브 지표 사이트:mql4.com
 

감사합니다 splxgf!!!!!!!!!!!!!!!!

특히 여기에서 ( OrderType( )==OP_BUY && OrderType( )==OP_SELL )

음, 물론 주문은 구매와 판매 모두 가능하지만 ||

르주!! 예, 나는 차를 몰았습니다 ... 현물 ..

if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*포인트)


포인트가 누구이며 왜 0.5를 곱하는지 명확히 하는 것이 좋습니다. 예, normalize double이 없는 옵션은 0과 비교할 때 그다지 신뢰할 수 없습니다. 여기에서 작동합니다.

티켓 은 정수 유형 이고 OrderClose 부울입니다... 그렇게 하지 않는 것이 좋습니다.

while 루프는 무한하고 시장 주문만 삭제하려고 시도합니다. 보류 중인 주문이 있으면 이 음악은 영원합니다. 감사해요!! !!!!

 

얘들아 차이점이 뭔지 알려줘????

if(OrderSymbol()!=Symbol())계속;

그리고

if(OrderSymbol()==Symbol())

????????????

 

예, 잘 모르겠습니다. 계속, 이전 루프로 보내야 하며, 작성 방법에 따라 일치할 때까지 반복될 수 있습니다.

돕다!!!!!!! (이전 페이지의 내 게시물)!

 
//+------------------------------------------------------------------+
//|             AsctrendBuySellExpert_v1.mq4  code by Newdigital     |
//|                                     https://www.forex-tsd.com     |
//|                using Gordago software http://www.gordago.com     |
//| - Asctrend code for this EA was taken from                       |
//|   AscTrend_NonLag EA coded by of Igorad.                         |
//| - "Non-Trading Hours" on the screen fixing code by Locutus       |
//|   from Updated DayTradingMM EA                                   |
//+------------------------------------------------------------------+
#property copyright "newdigital"
#property link       "https://www.forex-tsd.com"

#include <stderror.mqh> // библиотека ошибок
#include <stdlib.mqh>
extern int MAGIC  = 100111 ;

extern string PARAMETERS_EXPERT = "PARAMETERS EXPERT" ;
extern color clOpenBuy = Blue ;
extern color clCloseBuy = Aqua ;
extern color clOpenSell = Red ;
extern color clCloseSell = Violet ;
extern color clModiBuy = Blue ;
extern color clModiSell = Red ;
extern string Name_Expert = "AsctrendBuySellExpert" ;
extern bool UseSound = False;
extern string NameFileSound = "alert.wav" ;

extern string PARAMETERS_FILTER = "PARAMETERS FILTER" ;
extern bool UseHourTrade = False;
extern int FromHourTrade = 8 ;
extern int ToHourTrade = 18 ;


extern string PARAMETERS_TRADE = "PARAMETERS TRADE" ;
extern double Lots = 0.10 ;
extern int Slippage = 4 ;
extern double lStopLoss = 1000 ;
extern double sStopLoss = 1000 ;
extern double lTakeProfit = 1000 ;
extern double sTakeProfit = 1000 ;
extern double lTrailingStop = 1000 ;
extern double sTrailingStop = 1000 ;

extern string PARAMETERS_INDICATOR_ONE  = "ASCTrend" ;
extern bool     UseASCtrend    = True;
extern int      RISK           = 3 ;
int asctrend,asctrend1;
int ASCtrend,ASCtrend1;



void deinit() {
   Comment ( "" );
}

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

int start(){
   if (UseHourTrade){
   if (( Hour ()>=FromHourTrade)&&( Hour ()<=ToHourTrade))
       Comment ( "Trading Hours" );
   else
     {
       Comment ( "Non-trading Hours" );
       return ( 0 );
     }
   }
   if ( Bars < 100 ){
       Print ( "bars less than 100" );
       return ( 0 );
   }
   if (lStopLoss< 10 ){
       Print ( "StopLoss less than 10" );
       return ( 0 );
   }
   if (lTakeProfit< 10 ){
       Print ( "TakeProfit less than 10" );
       return ( 0 );
   }
   if (sStopLoss< 10 ){
       Print ( "StopLoss less than 10" );
       return ( 0 );
   }
   if (sTakeProfit< 10 ){
       Print ( "TakeProfit less than 10" );
       return ( 0 );
   }
   
   if (UseASCtrend)
{
ASCtrend = ASCTrend(RISK);
bool ASCtrendBuy  = ASCtrend> 0 && ASCtrend1< 0 ;  
bool ASCtrendSell = ASCtrend< 0 && ASCtrend1> 0 ;
} 
else {ASCtrendBuy = true; ASCtrendSell = true;}

   if ( AccountFreeMargin ()<( 1000 *Lots)){
       Print ( "We have no money. Free Margin = " , AccountFreeMargin ());
       return ( 0 );
   }
   if (!ExistPositions()){

       if ((ASCtrendBuy)){
         OpenBuy();
         return ( 0 );
      }

       if ((ASCtrendSell)){
         OpenSell();
         return ( 0 );
      }
   }
   if (ExistPositions()){
       if ( OrderType ()==OP_BUY){

         if ((ASCtrendSell)){
            CloseBuy();
             return ( 0 );
         }
      }
       if ( OrderType ()==OP_SELL){

         if ((ASCtrendBuy)){
            CloseSell();
             return ( 0 );
         }
      }
   }
   TrailingPositionsBuy(lTrailingStop);
   TrailingPositionsSell(sTrailingStop);
   ASCtrend1=ASCtrend;
   return ( 0 );
}

bool ExistPositions() {
         for ( int i= 0 ; i< OrdersTotal (); i++) {
                 if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
                         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGIC) {
                                 return (True);
                        }
                } 
        } 
         return (false);
}
void TrailingPositionsBuy( int trailingStop) { 
   for ( int i= 0 ; i< OrdersTotal (); i++) { 
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { 
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGIC) { 
             if ( OrderType ()==OP_BUY) { 
               if (Bid- OrderOpenPrice ()>trailingStop* Point ) { 
                   if ( OrderStopLoss ()<Bid-trailingStop* Point ) 
                     ModifyStopLoss(Bid-trailingStop* Point ); 
               } 
            } 
         } 
      } 
   } 
} 
void TrailingPositionsSell( int trailingStop) { 
   for ( int i= 0 ; i< OrdersTotal (); i++) { 
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { 
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGIC) { 
             if ( OrderType ()==OP_SELL) { 
               if ( OrderOpenPrice ()-Ask>trailingStop* Point ) { 
                   if ( OrderStopLoss ()>Ask+trailingStop* Point || OrderStopLoss ()== 0 )  
                     ModifyStopLoss(Ask+trailingStop* Point ); 
               } 
            } 
         } 
      } 
   } 
} 
void ModifyStopLoss( double ldStopLoss) { 
   bool fm;
   fm = OrderModify ( OrderTicket (), OrderOpenPrice (),ldStopLoss, OrderTakeProfit (), 0 , CLR_NONE ); 
   if (fm && UseSound) PlaySound (NameFileSound); 
} 

void CloseBuy() { 
   bool fc; 
   fc= OrderClose ( OrderTicket (), OrderLots (), Bid, Slippage, clCloseBuy); 
   if (fc && UseSound) PlaySound (NameFileSound); 
} 
void CloseSell() { 
   bool fc; 
   fc= OrderClose ( OrderTicket (), OrderLots (), Ask, Slippage, clCloseSell); 
   if (fc && UseSound) PlaySound (NameFileSound); 
} 
void OpenBuy() { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 
   ldLot = GetSizeLot(); 
   ldStop = GetStopLossBuy(); 
   ldTake = GetTakeProfitBuy(); 
   lsComm = GetCommentForOrder(); 
   BroCoOrderSend( Symbol (),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC, 0 ,clOpenBuy); 
   if (UseSound) PlaySound (NameFileSound); 
} 
void OpenSell() { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 

   ldLot = GetSizeLot(); 
   ldStop = GetStopLossSell(); 
   ldTake = GetTakeProfitSell(); 
   lsComm = GetCommentForOrder(); 
   BroCoOrderSend( Symbol (),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC, 0 ,clOpenSell); 
   if (UseSound) PlaySound (NameFileSound); 
} 
string GetCommentForOrder() {   return (Name_Expert); } 
double GetSizeLot() {   return (Lots); } 
double GetStopLossBuy() {       return (Bid-lStopLoss* Point );} 
double GetStopLossSell() {       return (Ask+sStopLoss* Point ); } 
double GetTakeProfitBuy() {     return (Ask+lTakeProfit* Point ); } 
double GetTakeProfitSell() {     return (Bid-sTakeProfit* Point ); }

int ASCTrend( int risk )
{

   double smin, smax, bsmin, bsmax;
   int len = 3 + 2 *risk;
   
   smin=Low[Lowest( NULL , 0 ,MODE_LOW,len, 1 )]; 
   smax=High[Highest( NULL , 0 ,MODE_HIGH,len, 1 )];

   bsmax = smax-(smax - smin)*( 33.0 -risk)/ 100.0 ;
   bsmin = smin+(smax - smin)*( 33.0 -risk)/ 100.0 ;

   asctrend = asctrend1;
   
   if (Close[ 1 ]>bsmax)  asctrend= 1 ; 
   if (Close[ 1 ]<bsmin)  asctrend=- 1 ;
   
   asctrend1 = asctrend;
   return (asctrend);
}    
//+------------------------------------------------------------------+
//| Функция для работы с дилинговым центром BroCo                    |
//+------------------------------------------------------------------+
int BroCoOrderSend( string symbol, 
                 int cmd, 
                 double volume, 
                 double price, 
                 int slippage, 
                 double stoploss, 
                 double takeprofit, 
                 string comment, 
                 int magic, 
                 datetime expiration, 
                 color arrow_color)
{
   int ticket = OrderSend (symbol,cmd, volume, price, slippage, 0 , 0 , comment, magic, expiration, arrow_color);   
   int check = - 1 ;
   if (ticket > 0 && (stoploss != 0 || takeprofit != 0 )) {
       if (! OrderModify (ticket, price, stoploss, takeprofit,expiration, arrow_color)) {
         check = GetLastError ();
         if (check != ERR_NO_ERROR) {
             Print ( "OrderModify error: " , ErrorDescription(check));
         }
      }
   } else {
      check = GetLastError ();
       if (check != ERR_NO_ERROR){
         Print ( "OrderSend error: " ,ErrorDescription(check));
      }
   }
   return (ticket);
}  
  
//----------------------------------------------------------------
안녕하세요 여러분! 얘들 아, 나는 asctrend 지표에서 일하는 오래된 Expert Advisor를 만났습니다. 나는 오랫동안이 지표가 실시간으로 어떻게 작동하는지 확인하고 싶었지만 항상 포인트를 추적하는 것이 가능하지 않으며 거래의 그림이 완전하지 않습니다 . 테스터에서 확인해보니 점이 나올때마다 시그널이 있는데 데모에 올려보니 데모에서는 시그널을 건너뛰는 현상이 있는데 전문가는 로그에 아무것도 안쓰는데 찔끔찔끔 코드에서 주위를 둘러보고 걸림돌이 무엇인지 이해하지 못했습니다.
 
if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
       if ( NormalizeDouble ( OrderClosePrice ()- OrderTakeProfit (), Digits )< 0.5 * Point ) {
         Alert ( "Позиция с тикетом #" , OrderTicket (), " закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера" );
         // Здесь код для закрытия всех открытых позиций (тоже в цикле)
         for (   int y= OrdersTotal ()- 1 ; y>= 0 ; y--) { Alert ( "Здесь код для закрытия всех открытых позиций (тоже в цикле)" ,y);
           OrderSelect (y, SELECT_BY_POS );
               if (   OrderType ( )==OP_BUY || OrderType ( )==OP_SELL ){
                           OrderClose ( OrderTicket ( ), OrderLots ( ), OrderClosePrice ( ) , 0 , CLR_NONE );
   Alert ( "OrderClose-vse-2" ,   GetLastError ( ) ); C= 0 ;A= 1 ; }} 
         // Здесь код для удаления всех отложенных ордеров (также в цикле)
         for ( int f= OrdersTotal ()- 1 ; f>= 0 ; f--) { Alert ( "Здесь код для удаления всех отложенных ордеров (также в цикле)" ,f);
         OrderSelect (f, SELECT_BY_POS );
           if (   OrderType ( )==OP_BUYSTOP || OrderType ( )==OP_SELLSTOP ){ 
             OrderDelete ( OrderTicket ( )) ; Alert ( "OrderDelete-vse-2" ,   GetLastError ( ) ); }}   // CloseAll();
         }
      }
이미 썼는데 첫 번째 경고의 메시지만 로그에 기록됩니다.
 

터미널을 다시 설치한 후 MetaEditor가 작동을 멈췄습니다. 표시기 코드에서 아무 것도 변경하지 않은 경우에만 컴파일됩니다. 최소한 선의 색상이라도 무언가가 변경된 경우 오류가 발생합니다.

OS Windows 7. 누군가 비슷한 결함을 발견했을 수 있습니다. 어떻게 해야할지 말해줘?

 
코드가 긴 녀석들! 다른 사람의 코드는 무엇보다도 아직 해독되지 않은 암호라는 것을 다시 한 번 반복하고 싶습니다! 그리고 이것은 작은 작업이 아닙니다! 일부 프로그래머가 목록 킬로미터를 탐구하고 싶어할 것이라고 생각하십니까? 제 코드를 여러분 중 한 명에게 3천 줄만 주고 이 코드에 대한 작은 오해를 없애달라고 요청하겠습니다. 그냥 내 아이디어를 탐구하고 싶다고 생각하세요? 또 의심합니다. 그러므로 나는 당신에게 소원이 있습니다 - 핵심 질문을 할 때 가능한 한 간략하게 문제를 설명하고 동시에 본질을 이해할 수 있도록 설명을 충분하게 만드십시오. 그렇지 않으면, 당신의 외침은 허공에 대한 외침입니다. 코드는 게시물에 첨부할 수 있습니다. 이 모든 것이 필요하고 충분합니다.