QQEA 지표를 기반으로 Expert Advisor를 작성하고 있습니다. 일반적으로 어드바이저의 아이디어는 다음과 같습니다. 빨간색 선이 노란색 선을 아래에서 위로 교차할 때 빨간색 선이 노란색 선을 위에서 아래로 교차 할 때 하나 의 매수 주문을 열어야 합니다. 판매용. 하지만 주문을 하나만 열 수는 없습니다. 조건이 충족되는 동안 주문이 열립니다. 예, 구매 주문만 CHYADNT에서 찢어집니다!
// //
고문 코드
//--- 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 ;}
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 ;}
QQEA 지표를 기반으로 Expert Advisor를 작성하고 있습니다. 일반적으로 어드바이저의 아이디어는 다음과 같습니다. 빨간색 선이 노란색 선을 아래에서 위로 교차할 때 빨간색 선이 노란색 선을 위에서 아래로 교차 할 때 하나 의 매수 주문을 열어야 합니다. 판매용. 하지만 주문을 하나만 열 수는 없습니다. 조건이 충족되는 동안 주문이 열립니다. 예, 구매 주문만 CHYADNT에서 찢어집니다!
//
고문 코드
//--- 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);
}
//-------------------------------------------------------
QQEA 지표를 기반으로 Expert Advisor를 작성하고 있습니다. 일반적으로 어드바이저의 아이디어는 다음과 같습니다. 빨간색 선이 노란색 선을 아래에서 위로 교차할 때 빨간색 선이 노란색 선을 위에서 아래로 교차 할 때 하나 의 매수 주문을 열어야 합니다. 판매용. 하지만 주문을 하나만 열 수는 없습니다. 조건이 충족되는 동안 주문이 열립니다. 예, 그리고 구매 주문만 CHAYDNT에서 찢어집니다!
QQEA 지표를 기반으로 Expert Advisor를 작성하고 있습니다. 일반적으로 어드바이저의 아이디어는 다음과 같습니다. 빨간색 선이 노란색 선을 아래에서 위로 교차할 때 빨간색 선이 노란색 선을 위에서 아래로 교차 할 때 하나 의 매수 주문을 열어야 합니다. 판매용. 하지만 주문을 하나만 열 수는 없습니다. 조건이 충족되는 동안 주문이 열립니다. 예, 구매 주문만 CHYADNT에서 찢어집니다!
고문 코드
QQEA 지표를 기반으로 Expert Advisor를 작성하고 있습니다. 일반적으로 어드바이저의 아이디어는 다음과 같습니다. 빨간색 선이 노란색 선을 아래에서 위로 교차할 때 빨간색 선이 노란색 선을 위에서 아래로 교차 할 때 하나 의 매수 주문을 열어야 합니다. 판매용. 하지만 주문을 하나만 열 수는 없습니다. 조건이 충족되는 동안 주문이 열립니다. 예, 구매 주문만 CHYADNT에서 찢어집니다!
//
고문 코드
QQEA 지표를 기반으로 Expert Advisor를 작성하고 있습니다. 일반적으로 어드바이저의 아이디어는 다음과 같습니다. 빨간색 선이 노란색 선을 아래에서 위로 교차할 때 빨간색 선이 노란색 선을 위에서 아래로 교차 할 때 하나 의 매수 주문을 열어야 합니다. 판매용. 하지만 주문을 하나만 열 수는 없습니다. 조건이 충족되는 동안 주문이 열립니다. 예, 그리고 구매 주문만 CHAYDNT에서 찢어집니다!
//
고문 코드
문의할 수 있게 해주세요
문자열 유형 이 사용되는 이유는 무엇입니까?
여러분, 어드바이저는 두 개의 다른 시간 프레임(30 및 60)을 사용합니다. 어드바이저를 테스트하라고 알려주세요. 테스터에서 설정하는 기간은? 그리고 EA의 기간은 테스트를 변경하지 않습니다???
이러한 로그 항목은 무엇을 의미합니까?
2012.01.31 14:34:45 메모리 처리기: 10436536바이트의 메모리를 할당할 수 없습니다.
2012.01.31 14:34:45 HistoryBase: 메모리 'EURGBP1'이 충분하지 않습니다. [206996막대]
? 문제가 있는 경우 수정이 가능한가요?
배열을 도와주세요. 내가 원하는 방식으로 작동하지 않습니다.
가격 배열 p[]가 있습니다. 하나의 요소보다 짧은 길이를 갖는 새 배열을 생성해야 하며 첫 번째 배열에서 인접한 두 요소의 차이로 계산됩니다. 차이가 음수이면 -1을 곱합니다.
p[6]={1, 5, 9, 4, 6, 2, 3}
반드시 받아야 함
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)} 저것들. p_diff[5] = {4, 4, 5, 2, 4, 1}
이러한 로그 항목은 무엇을 의미합니까?
2012.01.31 14:34:45 메모리 처리기: 10436536바이트의 메모리를 할당할 수 없습니다.
2012.01.31 14:34:45 HistoryBase: 메모리 'EURGBP1'이 충분하지 않습니다. [206996막대]
? 문제가 있는 경우 수정이 가능한가요?
배열을 도와주세요. 내가 원하는 방식으로 작동하지 않습니다.
가격 배열 p[]가 있습니다. 길이가 한 요소 더 적고 첫 번째 배열에서 인접한 두 요소의 차이로 계산되는 새 배열을 생성해야 합니다. 차이가 음수이면 -1을 곱합니다.
p[6]={1, 5, 9, 4, 6, 2, 3}
반드시 받아야 함
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)} 저것들. p_diff[5] = {4, 4, 5, 2, 4, 1}
함수는 전달된 숫자 의 절대값 (모듈러스 값)을 반환합니다.