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

 
granit77 :
움직이는:

qaz2005 11.10.2011 09:30
모두 좋은 하루! 알려주십시오. 사용자 지정 표시기가 있으며 두 개의 개체가 있습니다. 그 의미를 알 수는 있지만 윗줄이든 아랫줄이든 알 방법이 없다. 버퍼의 수와 순서를 알 수 없고, 설치 중 설정이 없습니다. 인터넷에서 색상 설정도 버퍼로 제공된다는 것을 읽었습니다. iCustom() 기능을 통해 색상 설정에 어떻게 액세스할 수 있습니까? 아니면 지금 다른 기능이 작동할 수 있습니까?

미리 감사드립니다!

PS MQL4 언어에 대한 문헌이 있습니까? 이미 MQL4 Tutorial을 다운로드했고 거의 완료했습니다.

버퍼 번호는 "0"부터 계산되며,

iCustom(NULL, 0,"ind",150, 0.2);

여기서 150은 마침표,

0은 버퍼,

2는 바입니다.

https://docs.mql4.com/en/indicators/iCustom

예를 들어

#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red

따라서 파란색은 = 0 버퍼가 될 것입니다.

빨간색 = 1

 
skyjet :
알렉산더! 경험을 공유해 주셔서 감사합니다! 그러나 그 과정에서 나는 질문이 있었습니다. 통화 열거는 어떻게 이루어지나요? 아니면 Symbol() 대신 OrderSend() 함수의 통화 이름입니까? 그리고 코드에 예제를 작성하는 방법을 설명할 수 있습니까? 도움을 주셔서 다시 한 번 감사드립니다! :)

소설은 기본적으로 설명했다.

Expert Advisor에서 Symbol()이 지정될 때마다 SymbolMax[nnnn]와 같이 설정됩니다. OrderSend() 함수에서 다음과 같이 보입니다.

tick=OrderSend( SymbolMax[nnnn] ,OP_BUYSTOP,L,ur,0,sl,tp,CMM,MAGIC[I],0,Red);

나는 내 고문과 같이 쓰고 당신은 거기에서 자신의 가치를 대체합니다. 물론 통화 목록을 적어 두십시오. 예를 들면 다음과 같습니다.

string SymbolMax[4] = {"EURUSD", "GBPUSD", "USDCHF", "USDJPY"};

누군가 다르게 구현했을 수도 있지만 저는 이와 같은 통화 목록을 가지고 있습니다. 아래 코드를 참조하세요. 기능 시작의 시작 부분에 제공됩니다. 또한 메시지가 저크하지 않도록 5초 지연을 만들었습니다.

 if (nnnn< 24 ) nnnn+= 1 ; else nnnn= 0 ;
 


수정을 사용하여 반복하는 데 문제가 있습니다.

수정은 사용자 정의 함수로 제공됩니다.
표준 트롤의 가장 흥미로운 기능은 이 두 기능 모두에서 작동하며 단독으로도 잘 작동하며 손익분기점과 함께 프랙탈 수정을 사용하면 프랙탈 및 손익분기점에 대한 끝없는 수정이 시작됩니다.

수정을 기반으로 https://book.mql4.com/en/trading/ordermodify

손익분기점 수정 기준이 잘못 설정되어 있는 것 같습니다. 루핑이 발생하지 않도록 수정하려면 어떻게 해야 하나요?




//ф-я модификации ордеров безубыток

int mod_b()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double TS=Tral_Stop; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист&&((SL<TS && Tip==0)||(SL>TS && Tip==1))
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(Bid-TS*Point,Digits))
{
SL=Price+18*Point; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(Ask+TS*Point,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=Price-18*Point; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}

int mod_f()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.

//------------------------------------------------------обсчет фрактала

int f = 3; //номер бара с которого идет проверка наличия фрагтала
int DnN = 0, UpN = 0; //порядковый номер присвоен к направлению(upper, lower)
double UpFr = 0, DnFr = 0; //числовое значение фрагтала выраженное в еденице валюты присвоен к направлению(upper, lower)
while (f < Bars && (UpFr == 0 || DnFr == 0))
{
if (iFractals(Symbol(), 0, MODE_UPPER, f) != 0)
if (UpFr == 0)
{
UpFr = iFractals(Symbol(), 0, MODE_UPPER, f);//фрактальная отложка вверх(buy)
UpN = f;
}
if (iFractals(Symbol(), 0, MODE_LOWER, f) != 0)
if (DnFr == 0)
{
DnFr = iFractals(Symbol(), 0, MODE_LOWER, f);//фрактальная отложка вниз(sell)
DnN = f;
}
f++;
}
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double UD;
double TS=UD; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
if(Tip==0)
UD=DnFr;
if(Tip==1)
UD=UpFr;
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(UD,Digits))
{
SL=UD; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(UD,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=UD; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}
 

친애하는 포럼 사용자 여러분, 안녕하세요.

다른 시간대에 견적을 요청할 수 있는 방법을 알려주세요. 내 템플릿은 D로 설정되고 표시기는 더 작은 시간 프레임(예: M30, H1, H4)의 LOW, HIGH, OPEN, CLOSE 따옴표가 필요합니다.

 
Slava2007 :

친애하는 포럼 사용자 여러분, 안녕하세요.

다른 시간대에 견적을 요청할 수 있는 방법을 알려주세요. 내 템플릿은 D에 있고 표시기는 더 작은 시간 프레임(예: M30, H1, H4)의 LOW, HIGH, OPEN, CLOSE 따옴표가 필요합니다.

https://docs.mql4.com/ru/series
 

모두 좋은 저녁입니다. 여기서 무엇이 잘못되었는지 말해주세요. 여기에 코드가 있습니다.

//+----------------------------------------------- --------------------+
//| 시작 기능 |
//+----------------------------------------------- --------------------+
무효 시작()
{
//---- 내역 및 거래 확인
if(Bars<100 || IsTradeAllowed()==false) 반환;
//---- 현재 기호로 미결 주문 계산
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
그렇지 않으면 CheckForClose();

if (!IfTrueThenCountBarWork) 반환 (0);
for (int i = OrdersTotal() - 1, i >= 0, i--)
{
주문 선택(i, SELECT_BY_POS, MODE_TRADES)
if (OrderMagicNumber() == 700000) <---- 이 줄에 오류가 있습니다!!!
CloseAfterSomeBar(CountBar, OrderTicket());
}

}

 
isaev-av :

모두 좋은 저녁입니다. 여기서 무엇이 잘못되었는지 말해주세요. 여기에 코드가 있습니다.

//+----------------------------------------------- --------------------+
//| 시작 기능 |
//+----------------------------------------------- --------------------+
무효 시작()
{
//---- 내역 및 거래 확인
if(Bars<100 || IsTradeAllowed()==false) 반환;
//---- 현재 기호로 미결 주문 계산
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
그렇지 않으면 CheckForClose();

if (!IfTrueThenCountBarWork) 반환 (0);
for (int i = OrdersTotal() - 1, i >= 0, i--)
{
주문 선택(i, SELECT_BY_POS, MODE_TRADES)
if (OrderMagicNumber() == 700000) <---- 이 줄에 오류가 있습니다!!!
CloseAfterSomeBar(CountBar, OrderTicket());
}

}

누락된 문자 ";"
 

PapaYozh :
Пропущен символ ";"

고맙습니다!!! 나는 바로 눈치채지 못했다.


 

전문가를 위한 또 다른 질문입니다. 여기에서 개봉 조건을 올바르게 입력하는 방법: 닫기[2]<닫기[3] n 퍼센트, 이것은 판매용입니다. 물론 반대로 구매를 위해. 그리고 이 n이 최적화될 수 있다고요? 미리 감사합니다!

무효 CheckForOpen()
{
더블 마;
인트르;
//---- 새 막대의 첫 번째 틱에 대해서만 거래를 시작합니다.
if(볼륨[0]>1) 반환;
//---- 이동 평균 얻기
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- 판매 조건
if(열기[1]>ma && 닫기[1]<ma)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
반품;
}
//---- 구매 조건
if(열기[1]<ma && 닫기[1]>ma)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
반품;
}

 

어디가 잘못되었는지 알려주세요 plz... 아니면 MT4 자체가 멍청한 건지, 하지만 내 매수 주문은 고점에서만 열리며 매도 주문은 고점에서만 열리며 =) 규정하지 않았지만 EA 코드의 이러한 조건은 전혀 = )

 extern int TP = 200 ; 
     extern int TS = 50 ; 
     extern int TF = 1 ; 
     extern double lots = 0.1 ; 
     extern int Pips = 15 ; 
     extern int MaxPips = 100 ; 


     int slip = 3 ; 
     int Magic = 2 ; 
     int cnt,ticket,total; 

 //+------------------------------------------------------------------+ 
   //| expert initialization function | 
   //+------------------------------------------------------------------+ 
   int init() 
    { 
   //---- 

 //---- 
     return ( 0 ); 
    } 
   //+------------------------------------------------------------------+ 
   //| expert deinitialization function | 
   //+------------------------------------------------------------------+ 
   int deinit() 
    { 
   //---- 

 //---- 
     return ( 0 ); 
    } 
   //+------------------------------------------------------------------+ 
   //| expert start function | 
   //+------------------------------------------------------------------+ 

 int start() 
    { 
   //---- 

 static double PriceOld = 0.0 ; 
 double PriceNow; 
 PriceNow = NormalizeDouble (Bid, 6 ); 

 total = OrdersTotal (); 
 if (total < 1 ) 
 { 
     if ((PriceNow-PriceOld)>=Pips* Point && (PriceNow-PriceOld)<MaxPips* Point ) 
    { 
           ticket = OrderSend ( Symbol (),OP_BUY,lots,Ask,slip,Bid-TS* Point , 0 , 0 ,Magic, 0 , Green ); 
           if (ticket> 0 ) 
               { 
                   OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES); 
                   Print ( "Ордер на покупку успешно открыт по цене:" , OrderOpenPrice ()); 
               } 
               else 
               { 
                   Print ( "Ордер не открыт по причине:" , GetLastError ()); 
                   return ( 0 ); 
               } 
     } 

 if ((PriceNow-PriceOld)<=(-Pips)* Point && (PriceNow-PriceOld)>(-MaxPips)* Point ) 
     { 
           ticket = OrderSend ( Symbol (),OP_SELL,lots,Bid,slip,Ask+TS* Point , 0 , 0 ,Magic, 0 , Red ); 
           if (ticket> 0 ) 
               { 
                   OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES); 
                   Print ( "Ордер на покупку успешно открыт по цене:" , OrderOpenPrice ()); 
               } 
               else 
               { 
                   Print ( "Ордер не открыт по причине:" , GetLastError ()); 
                   return ( 0 ); 
               } 
     } 
 } 
return(0);
}