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
skyjet : 알렉산더! 경험을 공유해 주셔서 감사합니다! 그러나 그 과정에서 나는 질문이 있었습니다. 통화 열거는 어떻게 이루어지나요? 아니면 Symbol() 대신 OrderSend() 함수의 통화 이름입니까? 그리고 코드에 예제를 작성하는 방법을 설명할 수 있습니까? 도움을 주셔서 다시 한 번 감사드립니다! :)
소설은 기본적으로 설명했다.
Expert Advisor에서 Symbol()이 지정될 때마다 SymbolMax[nnnn]와 같이 설정됩니다. OrderSend() 함수에서 다음과 같이 보입니다.
수정은 사용자 정의 함수로 제공됩니다. 표준 트롤의 가장 흥미로운 기능은 이 두 기능 모두에서 작동하며 단독으로도 잘 작동하며 손익분기점과 함께 프랙탈 수정을 사용하면 프랙탈 및 손익분기점에 대한 끝없는 수정이 시작됩니다.
수정을 기반으로 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; // Из цикла модифи. }
//+----------------------------------------------- --------------------+ //| 시작 기능 | //+----------------------------------------------- --------------------+ 무효 시작() { //---- 내역 및 거래 확인 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()); }
//+----------------------------------------------- --------------------+ //| 시작 기능 | //+----------------------------------------------- --------------------+ 무효 시작() { //---- 내역 및 거래 확인 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()); }
전문가를 위한 또 다른 질문입니다. 여기에서 개봉 조건을 올바르게 입력하는 방법: 닫기[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); 반품; }
움직이는:
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
알렉산더! 경험을 공유해 주셔서 감사합니다! 그러나 그 과정에서 나는 질문이 있었습니다. 통화 열거는 어떻게 이루어지나요? 아니면 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초 지연을 만들었습니다.
수정을 사용하여 반복하는 데 문제가 있습니다.
수정은 사용자 정의 함수로 제공됩니다.
표준 트롤의 가장 흥미로운 기능은 이 두 기능 모두에서 작동하며 단독으로도 잘 작동하며 손익분기점과 함께 프랙탈 수정을 사용하면 프랙탈 및 손익분기점에 대한 끝없는 수정이 시작됩니다.
수정을 기반으로 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; // Из цикла модифи.
}
{
//--------------------------------------------------------------- 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 따옴표가 필요합니다.
친애하는 포럼 사용자 여러분, 안녕하세요.
다른 시간대에 견적을 요청할 수 있는 방법을 알려주세요. 내 템플릿은 D에 있고 표시기는 더 작은 시간 프레임(예: M30, H1, H4)의 LOW, HIGH, OPEN, CLOSE 따옴표가 필요합니다.
모두 좋은 저녁입니다. 여기서 무엇이 잘못되었는지 말해주세요. 여기에 코드가 있습니다.
//+----------------------------------------------- --------------------+
//| 시작 기능 |
//+----------------------------------------------- --------------------+
무효 시작()
{
//---- 내역 및 거래 확인
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());
}
}
모두 좋은 저녁입니다. 여기서 무엇이 잘못되었는지 말해주세요. 여기에 코드가 있습니다.
//+----------------------------------------------- --------------------+
//| 시작 기능 |
//+----------------------------------------------- --------------------+
무효 시작()
{
//---- 내역 및 거래 확인
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 코드의 이러한 조건은 전혀 = )