포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 1092

 
OS 재설치. 재설치 전 상태로 MT4 OS 재설치 후 복원하는 방법입니다.
지표, 전문가 고문, 스크립트; 템플릿, 프로필; 계정
 
AlexandrL :
OS 재설치. 재설치 전 상태로 MT4 OS 재설치 후 복원하는 방법입니다.
지표, 전문가 고문, 스크립트; 템플릿, 프로필; 계정
다시 설치하기 전에 터미널 폴더를 플래시 드라이브에 복사하십시오. 7 이상이면 공유 폴더입니다. 자세한 내용 은 여기
 

안녕하세요.

화살표 표시기 고문.

위쪽 프랙탈에서 판매하고 아래쪽 프랙탈 에서 구매합니다. 최대 작동 중 1 주문. 그러나 어딘가에 오류가 있습니다. 왜냐하면. 고문은 프랙탈을 고려하지 않고 구매로만 엽니다. 또는 전혀 열리지 않습니다(iCustom에서 시프트를 변경하는 경우). Expert Advisor(마우스 교차점)에 다른 조건을 삽입하려고 했습니다. 모든 것이 작동하지만 다이얼 표시기에서 데이터를 가져오지는 않습니다.

지시자:

 //+------------------------------------------------------------------+
//|                                                   MI_Fractal.mq4 |
//|                                                     Орешкин А.В. |
//|                                        http://www.vk.com/mtforex |
//+------------------------------------------------------------------+
#property copyright "Орешкин А.В."
#property link        "http://www.vk.com/mtforex"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Yellow
#property indicator_width1 2
#property indicator_width2 2

//--- input parameters
extern int        leftBars= 10 ;
extern int        rightBars= 2 ;
extern int        difference= 10 ;
//extern int       maximumBars=1000;
extern bool       showUp= true ;
extern bool       showDown= true ;

bool   UP_Fractal,DOWN_Fractal;
double DEF,up[],down[];

int init()
  {
   DEF= NormalizeDouble (difference* Point , Digits );
   SetIndexBuffer ( 0 ,up);
   SetIndexBuffer ( 1 ,down);
   SetIndexStyle( 0 , DRAW_ARROW );
   SetIndexStyle( 1 , DRAW_ARROW );    
   SetIndexArrow( 0 , 217 );
   SetIndexArrow( 1 , 218 );
   return ( 0 );
  }

int deinit(){ return ( 0 );}

int start()
  {   
   //for (int i=maximumBars;i>rightBars;i--)
   for ( int i= Bars -IndicatorCounted()-leftBars- 1 ;i>rightBars;i--)   
      { //3
      UP_Fractal= true ;DOWN_Fractal= true ;
      
       for ( int x=i+leftBars;x>=i-rightBars;x--)
         { //0
         if (x==i) continue ;
         if (High[i]-High[x]<DEF) UP_Fractal= false ;
         if (Low[x]-Low[i]<DEF) DOWN_Fractal= false ;
         } //0
      
      up[i]=EMPTY;
      down[i]=EMPTY;
      
       if (showUp)   
         if (UP_Fractal && !DOWN_Fractal) up[i]=High[i];
      
       if (showDown)   
         if (!UP_Fractal && DOWN_Fractal) down[i]=Low[i]; 
      } //3
   return ( 0 );
  }


올빼미 코드:

 double upFr= iCustom ( Symbol (), 0 , "MI_Fractal" ,leftBars,rightBars,difference,showUp,showDown, 0 , 1 );
double downFr= iCustom ( Symbol (), 0 , "MI_Fractal" ,leftBars,rightBars,difference,showUp,showDown, 1 , 1 ); 
     
   if (upFr!= EMPTY_VALUE )   
   //if (upFr<2) 
   //if (upFr>0)    
     {   
                                          
       Alert (upFr); 
      Opn_S= true ;                             
       //Cls_B=true;                                
     }
 if (downFr!= EMPTY_VALUE )
   //if (downFr<2)
 //  if (downFr>0)                                              
     {                                         
     Opn_B= true ;                              
     //Cls_S=true;                             
     }

이미 다양한 솔루션을 시도했지만 작동하지 않습니다. 어디가 잘못되었는지 알려주세요.

파일:
 

안녕하세요.

화요일에 첫 번째 막대 의 시가를 찾고 일주일 내내 계산할 수 있도록 수정하도록 도와주세요.

고맙습니다.

 

안녕하세요, 누군가가 트리거 후 보류 중인 열기를 중지하도록 여기에 무엇을 입력해야 하는지 알려주시면 감사하겠습니다.

//+----------------------------------------------- --------------------+
//| 저작권 © 2014, Khlystov Vladimir |
//| http://cmillion.narod.ru |
//+----------------------------------------------- --------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#속성 링크 "http://cmillion.ru"
#속성엄격
#property description "EA는 시장 변동에 따라 거래되며 어떠한 지표도 사용하지 않습니다."
#property description "EA의 아이디어는 정지 주문이 현재 가격에서 주어진 거리만큼 이산적으로 움직이는 것입니다."
#property description "가격이 한 방향으로 충분히 급격하게 움직였다면, EA는 단순히 주문을 움직일 시간이 없었고 그것은 시장 하나가 되었습니다."
#property description "다음으로 주문 추적이 활성화됩니다."
//------------------------------------------------ --------------------
extern int Stoploss = 10, //스톱로스, 0이면 변경되지 않음
이익을 취하다 = 50; // 이익을 얻음, 0이면 변경되지 않음
extern int TrailingStop = 10; // 트롤 길이, 0이면 트롤 없음
외부 정수 TrailingStart = 0; // 언제 트레일을 켜야 하는지, 예를 들어 40에 도달한 후 n이 도착했습니다.
extern int StepTrall = 2; // trall 단계 - StepTall보다 더 가깝게 정지 손실을 이동합니다.
extern int NoLoss = 0, //주어진 이익 포인트 수로 손익분기점으로 전환, 0이면 손익분기점으로 전환되지 않음
최소 이익 손실 = 0; //손익분기점 전환 시 최소 이익
extern int 매직 = 77; // 마법
외부 intStep = 10; //가격과의 거리
외부 이중 로트 = 0.1;
외부 정수 TimeModify = 30; //순서 변경이 금지되기 전까지의 시간(초)
extern int 미끄러짐 = 30; //시장 주문(구매 또는 판매 주문)에 대한 최대 허용 가격 편차.
//------------------------------------------------ --------------------
날짜 시간 TimeBarB,TimeBarS;
//------------------------------------------------ --------------------
정수 시작()
{
이중 STOPLEVEL=시장 정보(Symbol(),MODE_STOPLEVEL);
이중 OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
int b=0,s=0,TicketB=0,TicketS=0,OT;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
OT = 주문 유형();
OSL = NormalizeDouble(OrderStopLoss(), 숫자);
OOP = NormalizeDouble(OrderOpenPrice(), 숫자);
SL=OSL;
만약 (OT==OP_BUY)
{
ㄴ++;
if (OSL<OOP && 손실 없음!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits);
if (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * 포인트, 숫자)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (입찰가 - OOP)/포인트 >= TrailingStart)
{
StLo = NormalizeDouble(입찰가 - TrailingStop*Point,Digits);
if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
}
만약 (SL>OSL)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("오류 ", GetLastError()," 주문 수정 구매 SL ",OSL,"->",SL);
else Print("SL 수정 주문 구매 ",OSL,"->",SL);
}
}
만약 (OT==OP_SELL)
{
s++;
if ((OSL>OOP || OSL==0) && 손실 없음!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits);
if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * 포인트, 숫자)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - 묻기)/포인트 >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
}
if ((SL < OSL || OSL==0) && SL!=0)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("오류 ", GetLastError()," 주문 수정 판매 SL ",OSL,"->",SL);
else Print("SL 수정 주문 판매 ",OSL,"->",SL);
}
}
if (OT==OP_BUYSTOP) {가격B=OOP; TicketB=OrderTicket();}
if (OT==OP_SELLSTOP) {가격S=OOP; TicketS=OrderTicket();}
}
}
}
if (b+티켓B==0)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * 포인트, 숫자); elseSL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * 포인트, 자릿수); elseTP=0;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent();
}
if (s+TicketS==0)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); elseSL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * 포인트, 자릿수); elseTP=0;
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
}
if (티켓B!=0)
{
if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * 포인트, 숫자); elseSL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * 포인트, 자릿수); elseTP=0;
if (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
}
}
if (티켓 수!=0)
{
if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point, Digits)-PriceS)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); elseSL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * 포인트, 자릿수); elseTP=0;
if (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
}
}
반환(0);
}
//------------------------------------------------ --------------------

파일:
 
yaaarik777 :

안녕하세요.

화요일에 첫 번째 막대의 시가를 찾고 일주일 내내 계산할 수 있도록 수정하도록 도와주세요.

고맙습니다.

if (DayOfWeek() == 1) 가격 = iOpen(Symbol(), PERIOD_D1 , 4);
if (DayOfWeek() >= 2) 가격 = iOpen(Symbol(), PERIOD_D1, DayOfWeek() - 2);

 

MetaTrader의 결함처럼 들립니다. 절차를 입력하려고 할 때 중단을 경험한 사람이 있습니까?

여기 간단한 코드가 있습니다

무효 OnInit()

{

...

인쇄 ("외부 절차");

StartBuy(가격, 테이크, 스탑, 로트);

...

}

void StartBuy(더블 프라이스, 더블 테이크, 더블 스탑, 더블 로트)

{

Print("프로시저 내부");

....

}

한 줄 외부 프로시저를 제공한 다음 테스터가 멈춥니다. 그것은 무엇입니까?

 
A13ksandr :

MetaTrader의 결함처럼 들립니다. 절차를 입력하려고 할 때 중단을 경험한 사람이 있습니까?

다음은 간단한 코드입니다.

무효 OnInit()

{

...

Print("외부 절차");

StartBuy(가격, 테이크, 스탑, 로트);

...

}

인터넷 거래를 위해 따로 두십시오. 그것이 의미하는 바입니다. 얼마나 많은 사람들이 인터넷에 최소한의 코드가 있어야 실행이 가장 빨리 완료되어야 한다고 이미 반복했지만 여전히 읽기에 너무 게으른 사람이 있을 것입니다. 프로그램이 작동하도록 미리 정의된 표준 기능도 있습니다.

네, 그리고 init type은 로그인이 아닌 int로 작업중단 사유가 반환되는데, 그런 식으로 사용하는 것을 권장합니다.

 
Scarick1 :

안녕하세요, 누군가가 트리거 후 보류 중인 열기를 중지하도록 여기에 무엇을 입력해야 하는지 알려주시면 감사하겠습니다.

//+----------------------------------------------- --------------------+
//| 저작권 © 2014, Khlystov Vladimir |
//| http://cmillion.narod.ru |
//+----------------------------------------------- --------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#속성 링크 "http://cmillion.ru"
#속성엄격
#property description "EA는 시장 변동에 따라 거래되며 어떠한 지표도 사용하지 않습니다."
#property description "EA의 아이디어는 정지 주문이 현재 가격에서 주어진 거리만큼 이산적으로 움직이는 것입니다."
#property description "가격이 한 방향으로 충분히 급격하게 움직였다면, EA는 단순히 주문을 이동할 시간이 없고 시장 하나가 됩니다."
#property description "다음으로 주문 추적이 활성화됩니다."
//------------------------------------------------ --------------------
extern int Stoploss = 10, //스톱로스, 0이면 변경되지 않음
이익을 취하다 = 50; // 이익을 얻음, 0이면 변경되지 않음
extern int TrailingStop = 10; // 트롤 길이, 0이면 트롤 없음
외부 정수 TrailingStart = 0; // 언제 트레일을 켜야 하는지, 예를 들어 40에 도달한 후 n이 도착했습니다.
extern int StepTrall = 2; // trall 단계 - StepTall보다 더 가깝게 정지 손실을 이동합니다.
extern int NoLoss = 0, //주어진 이익 포인트 수로 손익분기점으로 전환, 0이면 손익분기점으로 전환되지 않음
최소 이익 손실 = 0; //손익분기점 전환 시 최소 이익
외부 정수 매직 = 77; // 마법
외부 intStep = 10; //가격과의 거리
외부 이중 로트 = 0.1;
외부 정수 TimeModify = 30; //순서 변경이 금지되기 전까지의 시간(초)
extern int 미끄러짐 = 30; //시장 주문(구매 또는 판매 주문)에 대한 최대 허용 가격 편차.
//------------------------------------------------ --------------------

날짜 시간 TimeBarB,TimeBarS;

bool TradingAllowed = true;

//------------------------------------------------ --------------------
정수 시작()
{
이중 STOPLEVEL=시장 정보(Symbol(),MODE_STOPLEVEL);
이중 OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
int b=0,s=0,TicketB=0,TicketS=0,OT;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
OT = 주문 유형();
OSL = NormalizeDouble(OrderStopLoss(), 숫자);
OOP = NormalizeDouble(OrderOpenPrice(), 숫자);
SL=OSL;
만약 (OT==OP_BUY)

{

ㄴ++;

거래허용=거짓;

if (OSL<OOP && 손실 없음!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits);
if (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * 포인트, 숫자)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (입찰가 - OOP)/포인트 >= TrailingStart)
{
StLo = NormalizeDouble(입찰가 - TrailingStop*Point,Digits);
if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
}
만약 (SL>OSL)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("오류 ", GetLastError()," 주문 수정 구매 SL ",OSL,"->",SL);
else Print("SL 수정 주문 구매 ",OSL,"->",SL);
}
}
만약 (OT==OP_SELL)
{

s++;

거래허용=거짓;

if ((OSL>OOP || OSL==0) && 손실 없음!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits);
if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * 포인트, 숫자)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - 묻기)/포인트 >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
}
if ((SL < OSL || OSL==0) && SL!=0)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("오류 ", GetLastError()," 주문 수정 판매 SL ",OSL,"->",SL);
else Print("SL 수정 주문 판매 ",OSL,"->",SL);
}
}
if (OT==OP_BUYSTOP) {가격B=OOP; TicketB=OrderTicket();}
if (OT==OP_SELLSTOP) {가격S=OOP; TicketS=OrderTicket();}
}
}

}

if (b == 0 && s == 0) TradingAllowed = true;

if (b+TicketB==0 && TradingAllowed )
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * 포인트, 숫자); elseSL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * 포인트, 자릿수); elseTP=0;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent();
}
if (s+TicketS==0 && TradingAllowed )
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); elseSL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * 포인트, 자릿수); elseTP=0;
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
}
if (티켓B!=0)
{
if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * 포인트, 숫자); elseSL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * 포인트, 자릿수); elseTP=0;
if (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
}
}
if (티켓 수!=0)
{
if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point, Digits)-PriceS)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); elseSL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * 포인트, 자릿수); elseTP=0;
if (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
}
}
리턴(0);
}
//------------------------------------------------ --------------------

어쩐지...


 
evillive :

Отставить торговать в ините, вот что значит. Сколько уже повторяли что в ините должен быть минимум кода с максимально быстрым завершением исполнения, всё равно найдется кто-нибудь, кому лень читать. Есть же стандартные предопределенные функции для работы программы.

Да и инит типа инт, а не войд, с возвратом причины прекращения работы, между прочим, рекомендую так им и пользоваться. 

죄송합니다! 물론 void OnTick()의 모든 것이 발생합니다. 설명)
사유: