놀라운 QQE 지표를 발견했습니다! 이 지표를 기반으로 조언자를 찾기로 결정했습니다....찾을 수 없었습니다. 그러나 이 포럼에서 사용자 POZITIV의 메시지를 찾았습니다.
그는 다음과 같은 논리를 내놓았습니다. "빨간 선이 노란색 선을 아래에서 위로 교차할 때 하나 의 매수 주문이 열려야 하고 빨간색 선이 위에서 아래로 노란색 선을 교차할 때 하나 의 매도 주문이 열려야 합니다."
그 결과 반제품 EA 코드를 게시했습니다.
나는 다른 논리를 생각해 냈습니다. 굵은 곡선이 위에서 아래로 점선을 교차할 때 굵은 빨간색 곡선이 아래에서 위로 점선을 교차할 때 이 로트를 매도하고 닫아야 합니다(매수). 게다가 동시에 반대 상황이 발생하면 닫는(매도) 다른 로트를 즉시 오픈(매수)하는 ..... 일반적으로 하나의 로트가 지속적으로 열려 있고 라인의 각 교차점을 사용하여 하나의 로트를 닫습니다. 동시에 다른 부지를 엽니다. 또한 교차점은 아마도 하나의 막대가 닫힌 후 값에 따라 고려되어야 합니다. 20분(종료 후)에 굵은 값이 51(기존)이고 점선 값이 50이고 21분(종료 후)에 굵은 값이 50이고 점선 값이 51인 경우 판매하는 것이 필요합니다. SL과 TK가 없습니다.
원칙적으로 논리는 간단합니다. 화살표, 경보 또는 메시지가 없습니다. 가장 순수한 형태의 자동 모드에서만 거래
이 코드(아래)를 그러한 논리로 개선하는 데 도움을 주세요. 코드에서 기간(1분에서 1일)과 SF 매개변수(스무딩)를 설정할 수 있도록 합니다.
둘째 날에는 코드를 이해하고 수정하려고 노력했지만 저는 프로그래머가 아닙니다((((((((((()
나는 당신의 도움을 정말로 바랍니다!
//--- input parametersexterndouble MaxRisk= 1.0 ;
externdouble FixLot = 0.01 ;
externdouble Exponent= 2.0 ;
externint Magic= 888 ;
// костылиexternint TakeProfit= 100 ;
externint StopLoss= 100 ;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int init()
{
return ( 0 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int deinit()
{
//----//----return ( 0 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start()
{
//----int Count= 0 ;
double b0,b1;
int ticket;
// параметры индикатораint SF= 5 ; // original 5int RSI_Period= 14 ; // original 14double DARFACTOR= 4.236 ; //original 4.236//------------ Параметры из индикатора QQEA -----------------------// Buffer0 -- красная жирнаяstring Buffer0= iCustom ( NULL , 0 , "QQEA" ,SF,RSI_Period,DARFACTOR, 0 , 0 );
// Buffer1 -- жёлтый пунктирstring Buffer1= iCustom ( NULL , 0 , "QQEA" ,SF,RSI_Period,DARFACTOR, 1 , 0 );
b0= StrToDouble (Buffer0);
b1= StrToDouble (Buffer1);
double Lot=GetLot(MaxRisk);
// если лот <0 выводим сообщение об ошибкеif (Lot== 0 )
{
Alert ( "Недостаточно средств!" );
return ( 0 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+if (Lot!= 0 && b0>b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_BUY,Lot);
if (ExistOrders( Symbol (), 1 , 888 , 0 )==true) // проверяем наличие ордера sell
{
CloseOrder();
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+if (Lot!= 0 && b0<b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_SELL,Lot);
if (ExistOrders( Symbol (), 0 , 888 , 0 )==true) // проверяем наличие ордера buy
{
CloseOrder();
}
}
Comment ( "Red line: " ,b0, "Yellow line: " ,b1);
return ( 0 );
}
//-------------------------------------------------------------//расчёт лотаdouble GetLot( int Risk)
{
double Free= AccountFreeMargin ();
double One_Lot = MarketInfo ( Symbol (),MODE_MARGINREQUIRED);
double Min_Lot = MarketInfo ( Symbol (),MODE_MINLOT);
double Max_Lot = MarketInfo ( Symbol (),MODE_MAXLOT);
double Step= MarketInfo ( Symbol (),MODE_LOTSTEP);
double Lot = MathFloor (Free*Risk/ 100 /One_Lot/Step)*Step;
if (Lot<Min_Lot) Lot=Min_Lot;
if (Lot>Max_Lot) Lot=Max_Lot;
if (Lot*One_Lot>Free) return ( 0.0 );
return (Lot);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool ExistOrders( string sy= "" , int op=- 1 , int Magic=- 1 , datetime ot= 0 )
{
int i,k= OrdersTotal (),ty;
if (sy== "0" ) sy= Symbol ();
for (i= 0 ; i<k; i++)
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+
{
if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
{
ty= OrderType ();
if (ty> 1 && ty< 6 )
{
if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || ty==op))
{
if (Magic< 0 || OrderMagicNumber ()==Magic)
{
if (ot<= OrderOpenTime ()) return (True);
}
}
}
}
}
return (False);
}
//открытие нового ордераint NewOrder( int Cmd, double Lot)
{
double TP= 0 ; //тейкпрофитdouble SL= 0 ; //стоплоссdouble PR= 0 ; //Ценаwhile (! IsTradeAllowed ()) Sleep ( 100 );
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+if (Cmd==OP_BUY)
{
PR=Ask;
if (TakeProfit> 0 ) TP=Ask+TakeProfit* Point ;
if (StopLoss> 0 ) SL=Ask-StopLoss* Point ;
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+if (Cmd==OP_SELL)
{
PR=Bid;
if (TakeProfit> 0 ) TP=Bid-TakeProfit* Point ;
if (StopLoss> 0 ) SL=Bid+StopLoss* Point ;
}
if (GetOrdersCount(Magic,Cmd)> 0 ) return ( 0 );
int tic= OrderSend ( Symbol (),Cmd,Lot,PR, 3 ,SL,TP, " " , 0 , 0 , Green );
if (tic< 0 ) Print ( "Ошибка открытия ордера: " , GetLastError ());
return (tic);
}
// закрытие ордераvoid CloseOrder()
{
double PR= 0 ;
while (! IsTradeAllowed ()) Sleep ( 100 );
if ( OrderType ()==OP_BUY) PR=Bid;
if ( OrderType ()==OP_SELL) PR=Ask;
if (! OrderClose ( OrderTicket (), OrderLots (),PR, 3 , Red ))
Print ( "Ошибка закрытия ордера: " , GetLastError ());
return ;
}
//+------------------------------------------------------------------+// подсчет кол-ва открытых позицийint GetOrdersCount( int MagicNumber, int Type)
{
int count= 0 ;
for ( int i= 0 ; i< OrdersTotal (); i++)
{
// already closedif ( OrderSelect (i,SELECT_BY_POS)==false) continue ;
// not current symbolif ( OrderSymbol ()!= Symbol ()) continue ;
// order was opened in another wayif ( OrderMagicNumber ()!=MagicNumber) continue ;
if ( OrderType ()==Type)
{
count++;
}
}
return (count);
}
//-------------------------------------------------------
여기서 고문은 교차로뿐만 아니라 양초가 닫힐 때 주문이 열리도록해야합니다.
도움을 주실 수 있는 분, 미리 감사드립니다.
그리고 이 틱에서 바가 닫힐지 어떻게 알 계획입니까? 아마도 새로운 바를 연 후에 ?
코드는 SRC 버튼으로 삽입됩니다.
확인.
네 새로운 바
확인.
네 새로운 바
좋은 하루입니다 여러분, 누군가가 WindowScreenShot 기능을 이해하도록 도와주세요. 3일째 아무도 대답하지 않음((.아래 내용으로 스크립트를 작성함(첨부파일 참조).
스크립트에 대해 2 단어로. 스크립트는 클라이언트 터미널 창의 현재 차트의 스크린샷을 생성하도록 설계되었습니다.외부 변수 extern datetime Bar_time 은 막대의 시간을 설정합니다. 차트에서 오른쪽 들여쓰기). 인라인
int bar_number=iBarShift(NULL,0,Bar_time,true)
extern datetime Bar_time 문자열로 외부 변수에 지정된 막대의 서수를 검색합니다. 그리고 이미 함수 자체에 직접
bool f=WindowScreenShot(name+".gif",1024,768,bar_number,Scale,Graph_View)
이제 실제 질문은... 간단하게 하기 위해 마지막 두 막대의 스크린샷을 만들어야 한다고 가정하겠습니다. 그렇다면 라인
int bar_number=iBarShift(NULL,0,Bar_time,true)
변경하지 않고 그대로 두면 다음과 같은 스크린샷이 나타납니다.
즉, 스크린샷에는 단일 막대가 없습니다(줄에 있지만
int bar_number=iBarShift(NULL,0,Bar_time,true)
막대 번호는 시간으로 계산되어야 함)
이 선을 다음과 같이 표현하면
int bar_number=iBarShift(NULL,0,Bar_time,true)+2
그런 다음 원하는 스크린샷을 얻습니다.![](https://c.mql5.com/mql4/forum/2012/10/eurusddh1u29234567_small.gif)
질문 : 왜 이 라인의 형식이
int bar_number=iBarShift(NULL,0,Bar_time,true)
위의 줄에 지정된 것에서 오른쪽으로 2개의 막대를 이동하여 스크린샷을 찍은 것입니까?
PS 포럼을 어지럽히지 않기 위해 미리 답변 주셔서 감사합니다.
코드 표시 + 표시기의 입력 매개변수는 무엇입니까
글쎄, 나는 모든 것을 20 번 확인하고 20 번을 확인하지 않고 쓰지 않을 것입니다. 모든 매개 변수는 표시기에서와 같이 올바르게 입력됩니다. 문제는 아마도 다른 데 있을 것입니다. 누구든지 그러한 문제를 겪을 수 있습니까?
동료!! 좋은 저녁이에요!
놀라운 QQE 지표를 발견했습니다! 이 지표를 기반으로 조언자를 찾기로 결정했습니다....찾을 수 없었습니다. 그러나 이 포럼에서 사용자 POZITIV의 메시지를 찾았습니다.
그는 다음과 같은 논리를 내놓았습니다. "빨간 선이 노란색 선을 아래에서 위로 교차할 때 하나 의 매수 주문이 열려야 하고 빨간색 선이 위에서 아래로 노란색 선을 교차할 때 하나 의 매도 주문이 열려야 합니다."
그 결과 반제품 EA 코드를 게시했습니다.
나는 다른 논리를 생각해 냈습니다. 굵은 곡선이 위에서 아래로 점선을 교차할 때 굵은 빨간색 곡선이 아래에서 위로 점선을 교차할 때 이 로트를 매도하고 닫아야 합니다(매수). 게다가 동시에 반대 상황이 발생하면 닫는(매도) 다른 로트를 즉시 오픈(매수)하는 ..... 일반적으로 하나의 로트가 지속적으로 열려 있고 라인의 각 교차점을 사용하여 하나의 로트를 닫습니다. 동시에 다른 부지를 엽니다. 또한 교차점은 아마도 하나의 막대가 닫힌 후 값에 따라 고려되어야 합니다. 20분(종료 후)에 굵은 값이 51(기존)이고 점선 값이 50이고 21분(종료 후)에 굵은 값이 50이고 점선 값이 51인 경우 판매하는 것이 필요합니다. SL과 TK가 없습니다.
원칙적으로 논리는 간단합니다. 화살표, 경보 또는 메시지가 없습니다. 가장 순수한 형태의 자동 모드에서만 거래
이 코드(아래)를 그러한 논리로 개선하는 데 도움을 주세요. 코드에서 기간(1분에서 1일)과 SF 매개변수(스무딩)를 설정할 수 있도록 합니다.
둘째 날에는 코드를 이해하고 수정하려고 노력했지만 저는 프로그래머가 아닙니다((((((((((()
나는 당신의 도움을 정말로 바랍니다!
글쎄, 나는 모든 것을 20 번 확인하고 20 번을 확인하지 않고 쓰지 않을 것입니다. 모든 매개 변수는 표시기에서와 같이 올바르게 입력됩니다. 문제는 아마도 다른 데 있을 것입니다. 누구든지 그러한 문제를 겪을 수 있습니까?
다른 날 나는 그와 싸우며 저녁을 보냈다. 지표에서 Expert Advisor로 외부를 전송할 때 매개변수의 순서가 혼동되었습니다. 거의 미쳐버릴 뻔했는데, 양이 일치했어요 :))
iCustom에 매개변수를 잘못 입력했을 뿐입니다. 검색.
다른 날 나는 그와 싸우며 저녁을 보냈다. 지표에서 Expert Advisor로 외부를 전송할 때 매개변수의 순서가 혼동되었습니다. 거의 미쳐버릴 뻔했는데, 양이 일치했어요 :))
그리고 여기 매개변수가 있습니다
iCustom을 통해 연결할 때 비표준 표시기의 매개변수 수에 제한이 있습니까?
약 8개의 매개변수가 있는 표시기가 있고 모든 매개변수를 올바르게 입력하고 여러 번 확인했지만 컴파일하는 동안 오류 ')'가 계속 나타납니다. 잘못된 매개변수 개수 D:\InstaTrader\experts\Expert_2.mq4 (11, 280 )
나는 "약 80"이라고 말할 것입니다.
거의 사용되지 않는 일부 매개변수에서 extern을 제거하면 혼동이 없을 것입니다.
내 질문에 주의:
왜 촛불 아래에 물건이 있습니까? 그 이유는 무엇입니까?
가격에 플래그를 만드는 방법 , 개체의 어떤 종류의 속성을 상기시키지 마십시오.