MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 189

 
Youri Lazurenko :

이것이 나를 위한 것입니다. 0 TP 및 SL로 주문을 열고 필요한 TP 및 SL 매개변수로 수정(주문)합니다. 나는 이미 썼습니다. 모든 것이 잘 작동하고 다른 계정에서는 잘 작동합니다. ndd에서는 그런 쓰레기만 있습니다. 그 전에는 비슷한 계정을 가진 사람과 일한 적이 없어서 비교할 수 없습니다. 아마도 이것은 bzdyk 전용 forex4yu이거나 모든 ndd-계정일 수 있습니다. 더 알고 싶습니다.
오류 130 이 있으므로 중지 주문의 매개변수를 확인하십시오. 어떤 경우에도 서버 설정에 지정된 StopLevel 값보다 가깝지 않아야 합니다. 0이면 이중 스프레드 + 1핍을 사용합니다.
 
Youri Lazurenko :

이것이 나를 위한 것입니다. 0 TP 및 SL로 주문을 열고 필요한 TP 및 SL 매개변수로 수정(주문)합니다. 나는 이미 썼습니다. 모든 것이 잘 작동하고 다른 계정에서는 잘 작동합니다. ndd에서는 그런 쓰레기만 있습니다. 그 전에는 비슷한 계정을 가진 사람과 일한 적이 없어서 비교할 수 없습니다. 아마도 이것은 bzdyk 전용 forex4yu이거나 모든 ndd-계정일 수 있습니다. 더 알고 싶습니다.

위치를 열 때 다음 함수를 사용하여 정확한 정지 및 소요 시간을 계산하십시오.

 //+------------------------------------------------------------------+
double CorrectStopLoss( string symbol_name, int op, double price_set, double stop_loss) {
   if (stop_loss== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,stop_loss),dg));
   else return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,stop_loss),dg));
}
//+------------------------------------------------------------------+
double CorrectStopLoss( string symbol_name, int op, double price_set, int stop_loss) {
   if (stop_loss== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,price-stop_loss*pt),dg));
   else return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,price+stop_loss*pt),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit( string symbol_name, int op, double price_set, double take_profit) {
   if (take_profit== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,take_profit),dg));
   else return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,take_profit),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit( string symbol_name, int op, double price_set, int take_profit) {
   if (take_profit== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,price+take_profit*pt),dg));
   else return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,price-take_profit*pt),dg));
}
//+------------------------------------------------------------------+
int StopLevel( string symbol_name) {
   int sp=( int ) SymbolInfoInteger (symbol_name, SYMBOL_SPREAD );
   int lv=( int ) SymbolInfoInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL );
   return ((lv== 0 )?sp* 2 :lv);
}
//+------------------------------------------------------------------+
 
Alexey Viktorov :

차이점이 뭐야

핍 = 특정 숫자의 차지/로트/틱 값 8/2/4 = 1

또는

핍 = 특정 숫자의 차지/(Lots*Tickvalue) 8/(2*4) = 8/8 = 1

분수를 사용할 수도 있습니다 ...


차이점은 내 이름을 딴 사람도 어떤 이유로 Point 를 곱한다는 것입니다. ( OrderCommission ()/(tv* OrderLots ()))* Point ()
 
Artyom Trishkin :
오류 130 이 있으므로 중지 주문의 매개변수를 확인하십시오. 어떤 경우에도 서버 설정에 지정된 StopLevel 값보다 가깝지 않아야 합니다. 0이면 이중 스프레드 + 1핍을 사용합니다.


다음 게시물에서 제공되는 기능에 대해 많은 감사를 드립니다.

사실 저는 정차를 전혀 설정하지 않습니다(평균화). 그리고 왜 이 오류는 터미널이 아침에 시작되고 수정이 발생했을 때 나타나지 않고, 주문(일일 차트)을 열 때 세션 시작 시 그리고 쌍에 혼자 있는 경우에만 존재(오류)되는 것입니다. 기술지원팀은 시간상으로도 거리상으로도(스프레드의 가치는 크지 않음) 수정 제한은 없다고 답했다.

지금까지 모든 권장 사항을 실험하고 결론을 내리겠습니다.

다시 한 번 진심으로 감사드립니다.

 
Vitalie Postolache :

차이점은 내 이름이 어떤 이유로 인해 Point도 곱한다는 것입니다. ( OrderCommission ()/(tv* OrderLots ()))* Point ()

글쎄, 나는 대답 할 것입니다 : 1.0520의 가격이 있습니다. 계산에서 우리는 (int)Comm 번호를 얻었습니다. 그런 다음 가격에서 더하거나 빼야합니다 = 1.0520 + (int)Comm ? 이제 수학 연산 중에 Point 를 곱하지 마십시오. 이것은 즉시 수행됩니다.

 
Youri Lazurenko :


다음 게시물에서 제공되는 기능에 대해 많은 감사를 드립니다.

사실 저는 정차를 전혀 설정하지 않습니다(평균화). 그리고 왜 이 오류는 터미널이 아침에 시작되고 수정이 발생했을 때 존재하지 않고, 주문(일일 차트)을 열 때 그리고 쌍에 혼자 있는 경우 세션 시작 시에만 존재(오류)됩니다. 기술지원팀은 시간상으로도 거리상으로도(스프레드의 가치는 크지 않음) 수정 제한은 없다고 답했다.

지금까지 모든 권장 사항을 실험하고 결론을 내리겠습니다.

다시 한번 감사합니다.

별말씀을요.

다음과 같이 사용하십시오 . 위치를 여는 함수에서 포인트에서 중지 대신 포인트에서 중지를 대체할 함수 호출을 입력하십시오. 또는 즉시 중지 가격을 입력하십시오. 컴파일러는 원하는 기능 자체를 선택합니다. 테이크도 마찬가지입니다.

예시:

 double price= SymbolInfoDouble ( Symbol (), SYMBOL_ASK );         // Цена открытия для Buy
double sl=CorrectStopLoss( Symbol (), OP_BUY , price, 200 );     // Стоп в 200 пунктов (вместо пунктов можно вписать расчётную цену, например Ask+200*Point() или значение цены МА)
double tp=CorrectTakeProfit( Symbol (), OP_BUY , price, 300 );   // Тейк в 300 пунктов (если вписать расчётную цену, то будет использоваться тип функции с double-параметром)
OrderSend ( Symbol (), OP_BUY ,Lots,price,slippage,sl,tp, "Комментарий ордера" ,Magic, 0 , clrBlue );
 
Vitaly Muzichenko :

글쎄, 나는 대답 할 것입니다 : 1.0520의 가격이 있습니다. 계산에서 우리는 (int)Comm 번호를 얻었습니다. 그런 다음 가격에서 더하거나 빼야합니다 = 1.0520 + (int)Comm ? 이제 수학 연산 중에 Point를 곱하지 마십시오. 이것은 즉시 수행됩니다.


글쎄, 그럼 아마도. 수수료를 가격이 아닌 핍으로 전환하는 방법에 대한 질문이 원래 제기되었을 뿐입니다.
 
Artyom Trishkin :

별말씀을요.

다음과 같이 사용하십시오 . 위치를 여는 함수에서 포인트에서 중지 대신 포인트에서 중지를 대체할 함수 호출을 입력하십시오. 또는 즉시 중지 가격을 입력하십시오. 컴파일러는 원하는 기능 자체를 선택합니다. 테이크도 마찬가지입니다.

예시:

다시 한번 감사합니다. 모두 제일 좋다.
 
친애하는 전문가 여러분, 말씀해 주십시오. 나는 피보나치 선을 만들었 습니다. 레벨의 색상과 스타일은 다르지만 항상 마지막 것과 동일하게 설정되어 있습니다. 어떻게 수정합니까? 다시 그리기와 미끄러짐은 어떤 곳에서도 도움이되지 않습니다 (

                   ObjectCreate ( 0 ,Fibo_Arrow, OBJ_FIBO , 0 , Time [ 0 ], Close [ 0 ], Time [ 0 ],price); // создание метки стпа на графике   
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_HIDDEN , true );         // Запрет на показ имени графического объекта в списке объектов 
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_SELECTABLE , false );   // запрет на выделение перемещение объекта мышью   
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_RAY_RIGHT , false );     // луч вправо
                   ObjectSetString ( 0 ,Fibo_Arrow, OBJPROP_TOOLTIP , "r\n" );       // подпись линии и и её длины в подсказку                  
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_COLOR , 1 , clrNONE );       // цвет   
                  
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELS , 3 );           // установим количество уровней   
                      
                   ObjectSetDouble ( 0 ,Fibo_Arrow, OBJPROP_LEVELVALUE , 0 , 1.5 );   // значение уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELCOLOR , 0 ,Green);   // цвет уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELSTYLE , 0 , 2 );     // стиль уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELWIDTH , 0 , 0 );     // толщина уровня 
                   ObjectSetString ( 0 ,Fibo_Arrow, OBJPROP_LEVELTEXT , 0 , "0.5" ); // описание уровня 
                  
                   ObjectSetDouble ( 0 ,Fibo_Arrow, OBJPROP_LEVELVALUE , 1 , 2 );   // значение уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELCOLOR , 1 ,Lime);   // цвет уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELSTYLE , 1 , 0 );     // стиль уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELWIDTH , 1 , 0 );     // толщина уровня 
                   ObjectSetString ( 0 ,Fibo_Arrow, OBJPROP_LEVELTEXT , 1 , "1" ); // описание уровня 
                  
                   ObjectSetDouble ( 0 ,Fibo_Arrow, OBJPROP_LEVELVALUE , 2 , 2.5 );   // значение уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELCOLOR , 2 ,Green);   // цвет уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELSTYLE , 2 , 2 );     // стиль уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELWIDTH , 2 , 0 );     // толщина уровня 
                   ObjectSetString ( 0 ,Fibo_Arrow, OBJPROP_LEVELTEXT , 2 , "1.5" ); // описание уровня 
 
Money_Maker :
친애하는 전문가 여러분, 말씀해 주십시오. 나는 피보나치 선을 만들었 습니다. 레벨의 색상과 스타일은 다르지만 항상 마지막 것과 동일하게 설정되어 있습니다. 어떻게 수정합니까? 다시 그리기와 미끄러짐은 어디에도 도움이 되지 않습니다(

Fibo 수준은 각 라인에 대해 다른 스타일과 색상으로 이러한 개체로 만들 수 없습니다. 무지개가 필요한 경우 별도의 선으로 그립니다.