Vitaly Muzichenko : 불명. 고문을 중지해야 하는 경우 제안된 옵션이 이에 대처하고 중지할 필요가 없으면 거래를 허용하고 그를 제한하지 마십시오. 중지 후 주문형 거래를 해야 하는 경우 시간을 전환하면 Disabled가 true가 되고 프로그램이 계속 작동합니다.
나는 사람들이 종종 후행 또는 손익분기 함수를 묻는 것을 알아차렸습니다. 여기에 가격 차트(예: MA 또는 포물선 )에 선을 그리는 함수에 전달된 일부 표시기의 값에 따라 스탑을 지정된 손익분기 수준으로 이동하고 포지션 스탑을 추적하는 스텁 함수를 추가했습니다.
#property strict// в самое начало кода вашей программы (если нету там ещё)
// Функцию - за пределы остальных функций программы //+------------------------------------------------------------------+ //| Трейлинг по значению + перенос стопа на уровень безубытка | //+------------------------------------------------------------------+ void TrailingByLevel( string symbol_name, // Имя символа int magic_number, // Magic ордера double level_of_trail, // Уровень, на который ставим стоп (например МА или Parabolic SAR) int trailing_start, // Профит в пунктах для старта трала int trailing_step, // Шаг трала в пунктах int trailing_stop, // Отступ стоплосс от уровня МА или SAR в пунктах int profit_for_breakeven= 15 , // Профит в пунктах для переноса стопа в безубыток int breakeven_level= 5 , // Уровень безубытка в пунктах bool use_trail= true , // Флаг использования трала bool use_breakeven= false// Флаг использования безубытка ) { int lv=StopLevel(symbol_name)+ 1 ; // Получаем значение Stop Level по символу + 1 пункт (из отдельной функции) for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) { if ( OrderSelect (i, SELECT_BY_POS )) { if ( OrderMagicNumber ()!=magic_number) continue ; //Если Магик не наш - идем к следующему ордеру if ( OrderSymbol ()!=symbol_name) continue ; //Если Символ не наш - идем к следующему ордеру //--- покупки if ( OrderType ()== OP_BUY ) { int digits=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS ); double point=( SymbolInfoDouble (symbol_name, SYMBOL_POINT )); double pb= SymbolInfoDouble (symbol_name, SYMBOL_BID ); double profit=pb- OrderOpenPrice (); // Профит позиции в цене (без комиссий и свопов) //--- безубыток if (use_breakeven) { //--- если профит в цене больше заданного if (profit>=profit_for_breakeven*point) { int err= ERR_NO_ERROR ; double sl= NormalizeDouble ( OrderOpenPrice ()+breakeven_level*point,digits); if (pb-lv*point>sl && OrderStopLoss ()<sl) { // Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись: // OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ... // ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка //ModifyOrder(-1,sl,-1,err); } if (err== ERR_MARKET_CLOSED ) return ; } } //--- трал if (use_trail) { //--- если профит в пунктах больше заданного, или изначально задан меньше ноля if (profit>=trailing_start*point || trailing_start== EMPTY ) { int err= ERR_NO_ERROR ; double sl= NormalizeDouble (level_of_trail-trailing_stop*point,digits); // вычисляем новый уровень стоплосс по значению, переданному в функцию //--- Если новое значение СЛ не ближе Stop Level и если новое положение СЛ больше старого+шаг СЛ, то модифицируем стоп позиции if (pb-lv*point>sl && OrderStopLoss ()+trailing_step*point<sl) { // Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись: // OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ... // ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка //ModifyOrder(-1,sl,-1,err); } if (err== ERR_MARKET_CLOSED ) return ; } } }
//--- Продажи if ( OrderType ()== OP_SELL ) { int digits=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS ); double point=( SymbolInfoDouble (symbol_name, SYMBOL_POINT )); double pa= SymbolInfoDouble (symbol_name, SYMBOL_ASK ); double profit= OrderOpenPrice ()-pa; // Профит позиции в цене (без комиссий и свопов) //--- безубыток if (use_breakeven) { //--- если профит в цене больше заданного if (profit>=profit_for_breakeven*point) { int err= ERR_NO_ERROR ; double sl= NormalizeDouble ( OrderOpenPrice ()-breakeven_level*point,digits); if (pa+lv*point<sl && ( OrderStopLoss ()>sl || OrderStopLoss ()== 0 )) { // Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись: // OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ... // ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка //ModifyOrder(-1,sl,-1,err); } if (err== ERR_MARKET_CLOSED ) break ; } } //--- трал if (use_trail) { //--- если профит в пунктах больше заданного, или изначально задан меньше ноля if (profit>=trailing_start*point || trailing_start== EMPTY ) { int err= ERR_NO_ERROR ; double sl= NormalizeDouble (level_of_trail+trailing_stop*point,digits); // вычисляем новый уровень стоплосс по значению, переданному в функцию //--- Если новое значение СЛ не ближе Stop Level и если новое положение СЛ больше старого+шаг СЛ, то модифицируем стоп позиции if (pa+lv*point<sl && ( OrderStopLoss ()-trailing_step*point>sl || OrderStopLoss ()== 0 )) { // Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись: // OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ... // ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка //ModifyOrder(-1,sl,-1,err); } if (err== ERR_MARKET_CLOSED ) break ; } } } } } } //+------------------------------------------------------------------+ 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); } //+------------------------------------------------------------------+
Artyom Trishkin : 나는 사람들이 종종 후행 또는 손익분기 함수를 묻는 것을 알아차렸습니다. 여기에 가격 차트에 선을 그리는 함수(예: MA 또는 포물선)에 전달된 일부 표시기의 값에 따라 스탑을 주어진 손익분기 수준으로 이동하고 포지션 스탑을 추적하는 스텁 함수를 추가했습니다.
일반적으로 ezhli 무언가를 요청하십시오. 또는 수정
안녕하세요 Artyom, CodeBase에 배치하지 않으시겠습니까? 적어도 하나의 올바른 코드가 더 있을 것입니다.
불명. 고문을 중지해야 하는 경우 제안된 옵션이 이에 대처하고 중지할 필요가 없으면 거래를 허용하고 그를 제한하지 마십시오. 중지 후 주문형 거래를 해야 하는 경우 시간을 전환하면 Disabled가 true가 되고 프로그램이 계속 작동합니다.
알았어 고마워.
입력 매개변수를 설정할지 여부를 선택하고 싶을 것입니다. "종가 후에 거래합니까, 아니면 종가 후에 거래하지 않습니다"?
그렇다면 다음과 같습니다.
// OnTick
if (OneTrade && !Disabled) return ;
깃발에 무뚝뚝한 것 같진 않은데
입력 매개변수를 설정할지 여부를 선택하고 싶을 것입니다. "종가 후에 거래합니까, 아니면 종가 후에 거래하지 않습니다"?
그렇다면 다음과 같습니다.
// OnTick
if (OneTrade && !Disabled) return ;
깃발에 무뚝뚝한 것 같진 않은데
고맙습니다!
문제는 이 항목이 얼마나 정확한지, 프로그램의 시작 부분에 있으며 프로그램 전체에서 많은 Time[0] 및 Time[1]이 사용되며 매번 호출되지 않도록 변수로 작성되었습니다. 배열 범위를 벗어난 오류는 없는 것 같지만 모든 것이 표면적으로 정의되어 있습니다.
//------------
void OnTimer ()
ArraySetAsSeries (TM, true );
if ( CopyTime ( _Symbol , PERIOD_CURRENT , 0 , 2 , TM)==- 1 ) return ;
TIME0 = TM[ 0 ];
TIME1 = TM[ 1 ];
고맙습니다!
좀 수정 부탁드려도 될까요?
현재 가격 에 수직선 배치
또는 유사한 내용이 있는 고문에 대한 링크
작동하도록 봇 주변에 매개변수를 분산하는 방법을 이해하고 싶습니다.
조금 수정 부탁드려도 될까요?
현재 가격 에 수직선 배치
또는 유사한 내용이 있는 고문에 대한 링크
작동하도록 봇 주변에 매개변수를 분산하는 방법을 이해하고 싶습니다.
먼저 따옴표 표시를 90도 회전해야 합니다.
포스트 998
수평이든 수직이든 상관없어, 내가 한 일이 작동하지 않는 것뿐이야
포스트 998
수평이든 수직이든 상관없어, 내가 한 일이 작동하지 않는 것뿐이야
// Функцию - за пределы остальных функций программы
//+------------------------------------------------------------------+
//| Трейлинг по значению + перенос стопа на уровень безубытка |
//+------------------------------------------------------------------+
void TrailingByLevel( string symbol_name, // Имя символа
int magic_number, // Magic ордера
double level_of_trail, // Уровень, на который ставим стоп (например МА или Parabolic SAR)
int trailing_start, // Профит в пунктах для старта трала
int trailing_step, // Шаг трала в пунктах
int trailing_stop, // Отступ стоплосс от уровня МА или SAR в пунктах
int profit_for_breakeven= 15 , // Профит в пунктах для переноса стопа в безубыток
int breakeven_level= 5 , // Уровень безубытка в пунктах
bool use_trail= true , // Флаг использования трала
bool use_breakeven= false // Флаг использования безубытка
)
{
int lv=StopLevel(symbol_name)+ 1 ; // Получаем значение Stop Level по символу + 1 пункт (из отдельной функции)
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS )) {
if ( OrderMagicNumber ()!=magic_number) continue ; //Если Магик не наш - идем к следующему ордеру
if ( OrderSymbol ()!=symbol_name) continue ; //Если Символ не наш - идем к следующему ордеру
//--- покупки
if ( OrderType ()== OP_BUY ) {
int digits=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
double point=( SymbolInfoDouble (symbol_name, SYMBOL_POINT ));
double pb= SymbolInfoDouble (symbol_name, SYMBOL_BID );
double profit=pb- OrderOpenPrice (); // Профит позиции в цене (без комиссий и свопов)
//--- безубыток
if (use_breakeven) {
//--- если профит в цене больше заданного
if (profit>=profit_for_breakeven*point) {
int err= ERR_NO_ERROR ;
double sl= NormalizeDouble ( OrderOpenPrice ()+breakeven_level*point,digits);
if (pb-lv*point>sl && OrderStopLoss ()<sl) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if (err== ERR_MARKET_CLOSED ) return ;
}
}
//--- трал
if (use_trail) {
//--- если профит в пунктах больше заданного, или изначально задан меньше ноля
if (profit>=trailing_start*point || trailing_start== EMPTY ) {
int err= ERR_NO_ERROR ;
double sl= NormalizeDouble (level_of_trail-trailing_stop*point,digits); // вычисляем новый уровень стоплосс по значению, переданному в функцию
//--- Если новое значение СЛ не ближе Stop Level и если новое положение СЛ больше старого+шаг СЛ, то модифицируем стоп позиции
if (pb-lv*point>sl && OrderStopLoss ()+trailing_step*point<sl) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if (err== ERR_MARKET_CLOSED ) return ;
}
}
}
//--- Продажи
if ( OrderType ()== OP_SELL ) {
int digits=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
double point=( SymbolInfoDouble (symbol_name, SYMBOL_POINT ));
double pa= SymbolInfoDouble (symbol_name, SYMBOL_ASK );
double profit= OrderOpenPrice ()-pa; // Профит позиции в цене (без комиссий и свопов)
//--- безубыток
if (use_breakeven) {
//--- если профит в цене больше заданного
if (profit>=profit_for_breakeven*point) {
int err= ERR_NO_ERROR ;
double sl= NormalizeDouble ( OrderOpenPrice ()-breakeven_level*point,digits);
if (pa+lv*point<sl && ( OrderStopLoss ()>sl || OrderStopLoss ()== 0 )) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if (err== ERR_MARKET_CLOSED ) break ;
}
}
//--- трал
if (use_trail) {
//--- если профит в пунктах больше заданного, или изначально задан меньше ноля
if (profit>=trailing_start*point || trailing_start== EMPTY ) {
int err= ERR_NO_ERROR ;
double sl= NormalizeDouble (level_of_trail+trailing_stop*point,digits); // вычисляем новый уровень стоплосс по значению, переданному в функцию
//--- Если новое значение СЛ не ближе Stop Level и если новое положение СЛ больше старого+шаг СЛ, то модифицируем стоп позиции
if (pa+lv*point<sl && ( OrderStopLoss ()-trailing_step*point>sl || OrderStopLoss ()== 0 )) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if (err== ERR_MARKET_CLOSED ) break ;
}
}
}
}
}
}
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
나는 사람들이 종종 후행 또는 손익분기 함수를 묻는 것을 알아차렸습니다. 여기에 가격 차트에 선을 그리는 함수(예: MA 또는 포물선)에 전달된 일부 표시기의 값에 따라 스탑을 주어진 손익분기 수준으로 이동하고 포지션 스탑을 추적하는 스텁 함수를 추가했습니다.
일반적으로 ezhli 무언가를 요청하십시오. 또는 수정