하지만 전략 테스터 의 스프레드는 일정하기 때문에 랜덤 스프레드 에뮬레이터가 필요했습니다. 테스터에서 확산 변화를 에뮬레이트하기 위해 80%의 경우에서 2에서 3포인트(4자리) 범위, 20%에서 3포인트 이상입니다. 이를 구현하는 방법에 대한 아이디어가 있거나 유사한 아이디어가 해결된 링크가 있을 수 있습니다.
마법의 오류는 스톱으로 닫을 때 고문이 자신의 위치가 스톱으로 닫히는 것을 보지 못한다는 사실로 이어집니다. 왜요? 답은 매직 123으로 포지션을 열고 스톱으로 청산을 확인하는 기능에 Magic 변수를 보내는 것입니다. 암시적 초기화와 동일하다고 생각하는 것은 무엇입니까? 영. 당연히 함수에서 마법이 0인 위치가 검색되고 당신의 위치는 123과 같습니다. 그리고 우리는 논쟁하지 않습니다. 하지만 그와 마찬가지로 ... 우리는 엉뚱한 주장을 합니다 ... 정지로 마감에 대한 응답을 확인하십시오.
나는 고문의 나머지 "죽은"논리를 보지 않았습니다. 나는 당신이 stop by close를 확인하는 기능을 처리하는 것을 도왔습니다...
아르템! 안녕하세요! 도움을 주셔서 다시 한 번 감사드립니다.
내가 이해하는 한 불필요한 "죽은" 논리를 모두 제거하고 나머지를 "부활"했습니다.
수정을 도와주신 기능만 거의 남겼습니다.
그런데 제 상상을 초월하는 기적이 일어나기 시작했습니다.
1. 당신의 고문이 각 촛불의 시작 부분에서 거래를 시작하는 형식으로 (저는 5분 있습니다)
2. 최소 랏을 계산하는 라인을 제거하면 Lot=MarketInfo(Symbol(), MODE_MINLOT);
EA는 잘 작동 하지만 isCloseLastPosByStop 기능이 작동하지 않습니다.
아주 오랜시간동안 엮어서 뭉쳤는데 헛수고였네요.. 오류가 어디에 숨어있는지 알려주시면 감사하겠습니다.
double Lot = 0.1 ; //я проинициализировал переменнуюint Magic= 123 ;
int start()
{
double Price=iOpen( Symbol (), 0 , 0 ); //запоминаем время открытия очередной свечиint ot= OrdersTotal (); //запоминаем количество всех открытых ордеровif ((ot== 0 ) //если ордеров в рынке никаких нет
&&(Bid==Price) // И ПРИ ЭТОМ если цена = цене открытия очередной свечи
&&(Open[ 1 ]-Close[ 1 ]> 100 * Point &&Open[ 1 ]-Close[ 1 ]< 120 * Point ) // И ПРИ ЭТОМ если свеча N1 соответствуе этим параметрам
&&(High[ 1 ]-Open[ 1 ]> 40 * Point &&High[ 1 ]-Open[ 1 ]< 60 * Point ) // И ПРИ ЭТОМ если свеча N1 соответствуе этим параметрам
&&(Close[ 1 ]-Low[ 1 ]> 40 * Point &&Close[ 1 ]-Low[ 1 ]< 60 * Point )) // И ПРИ ЭТОМ если свеча N1 соответствуе этим параметрам Lot=MarketInfo( Symbol (), MODE_MINLOT); //вычислить минимальный лот инструментаif (isCloseLastPosByStop( Symbol (), OP_BUY, Magic, Lot)) //вызываем функцию,если она вернула(не понимаю-ведь функция
{ //должна вернуть и положить сюда true или False,а здесь совсем другие передаваемые парам.)
t=Lot* 2 ; // удваиваем начальный лотOrderSend ( Symbol (),OP_SELL,Lot,Bid, 1 ,Ask+ 1500 * Point ,Ask- 300 * Point , "jfh" , 123 );
}
else//в противном случае(если функция на вернула ??????
{
Lot= 0.1 ; // лот отстается 0.1 OrderSend ( Symbol (),OP_SELL, 1 ,Bid,Lot,Ask+ 1500 * Point ,Ask- 300 * Point , "jfh" , 123 );
}
return ( 0 );
}
//+----------------------------------------------------------------------------+bool isCloseLastPosByStop( string sy, int op, int mn, double &ll) {
double pt;
int dg, i, j=- 1 , k=OrdersHistoryTotal()- 1 ;
datetime t= 0 ; // во избежание возможных ошибок после возможных будущих улучшенийfor (i=k; i>= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderMagicNumber()!=mn) continue ; // если магик не тот, переходим к следующемуif (OrderSymbol()!=sy) continue ; // если символ не тот, переходим к следующемуif (OrderType()!=op) continue ; // если тип не тот, переходим к следующемуif (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(OrderSymbol(), MODE_DIGITS); // количество знаков в цене символа ордера
pt=MarketInfo(OrderSymbol(), MODE_POINT); // размер пункта инструмента в валюте котировки ордераif ( MathAbs (OrderClosePrice()-OrderStopLoss())< 0.5 *pt) { // Если закрыт по стопу
ll=OrderLots(); // записываем количество лотов в ордере, закрытом по стопуreturn ( true ); // возвращаем истину
}
}
return (False); // возвращаем ложь (позиции нету, либо не по стопу)
}
그는 자신의 "죽은 논리"를 모두 제거하고 나머지는 "소생"했습니다 .... 자신의 이해에 따라.
수정을 도와주신 기능만 거의 남겼습니다.
그런데 제 상상을 초월하는 기적이 일어나기 시작했습니다.
후에
if ((ot== 0 ) //если ордеров в рынке никаких нет
&&(Bid==Price) //И ПРИ ЭТОМ если цена = цене открытия очередной свечи
&&(Open[ 1 ]-Close[ 1 ]> 100 * Point &&Open[ 1 ]-Close[ 1 ]< 120 * Point ) //И ПРИ ЭТОМ если свеча N1 соответствуе этим параметрам
&&(High[ 1 ]-Open[ 1 ]> 40 * Point &&High[ 1 ]-Open[ 1 ]< 60 * Point )
&&(Close[ 1 ]-Low[ 1 ]> 40 * Point &&Close[ 1 ]-Low[ 1 ]< 60 * Point ))
말씀하신대로 했습니다..... 아참, 어드바이저가 작동합니다.... isCloseLastPosByStop 기능이 작동하지 않습니다
double Lot= 0.1 ;
int Magic= 123 ;
int start()
{
double Price=iOpen( Symbol (), 0 , 0 ); //запоминаем время открытия очередной свечиint ot= OrdersTotal (); //запоминаем количество всех открытых ордеровif ((ot== 0 ) //если ордеров в рынке никаких нет
&&(Bid==Price) //И ПРИ ЭТОМ если ПРИ ЭТОМ цена = цене открытия очередной свечи
&&(Open[ 1 ]-Close[ 1 ]> 100 * Point &&Open[ 1 ]-Close[ 1 ]< 120 * Point ) //И ПРИ ЭТОМ если свеча N1 соответствуе этим параметрам
&&(High[ 1 ]-Open[ 1 ]> 40 * Point &&High[ 1 ]-Open[ 1 ]< 60 * Point )
&&(Close[ 1 ]-Low[ 1 ]> 40 * Point &&Close[ 1 ]-Low[ 1 ]< 60 * Point ))
{ Lot=MarketInfo( Symbol (), MODE_MINLOT); //вычислить минимальный лот инструментаif (isCloseLastPosByStop( Symbol (), OP_BUY, Magic, Lot)) //вызываем функцию,если она вернула(не понимаю-ведь функция
{ //должна вернуть и положить сюда true или False,а здесь совсем другие передаваемые парам.)
Lot=Lot* 2 ; // удваиваем начальный лотOrderSend ( Symbol (),OP_SELL,Lot,Bid, 1 ,Ask+ 1500 * Point ,Ask- 300 * Point , "jfh" , 123 );
}
else//в противном случае(если функция на вернула??????
{
Lot= 0.1 ; // лот отстается 0.1 OrderSend ( Symbol (),OP_SELL, 1 ,Bid,Lot,Ask+ 1500 * Point ,Ask- 300 * Point , "jfh" , 123 );
}
} return ( 0 );
}
//+----------------------------------------------------------------------------+bool isCloseLastPosByStop( string sy, int op, int mn, double &ll) {
double pt;
int dg, i, j=- 1 , k=OrdersHistoryTotal()- 1 ;
datetime t= 0 ; // во избежание возможных ошибок после возможных будущих улучшенийfor (i=k; i>= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderMagicNumber()!=mn) continue ; // если магик не тот, переходим к следующемуif (OrderSymbol()!=sy) continue ; // если символ не тот, переходим к следующемуif (OrderType()!=op) continue ; // если тип не тот, переходим к следующемуif (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(OrderSymbol(), MODE_DIGITS); // количество знаков в цене символа ордера
pt=MarketInfo(OrderSymbol(), MODE_POINT); // размер пункта инструмента в валюте котировки ордераif ( MathAbs (OrderClosePrice()-OrderStopLoss())< 0.5 *pt) { // Если закрыт по стопу
ll=OrderLots(); // записываем количество лотов в ордере, закрытом по стопуreturn ( true ); // возвращаем истину
}
}
return (False); // возвращаем ложь (позиции нету, либо не по стопу)
}
다음은 boolisCloseLastPosByStop(stringsy,intop,intmn,double&ll) 함수의 코드입니다.
미끄러짐이 3핍이면? 어떻게 든 생각하지 않았습니다))
if ( MathAbs (OrderClosePrice()-OrderStopLoss())< 0.5 *pt) { // Если закрыт по стопу
ll=OrderLots(); // записываем количество лотов в ордере, закрытом по стопуreturn ( true ); // возвращаем истину
안녕하세요.
내 전략은 스프레드 값을 고려하며 스프레드는 다음 기능에 의해 결정됩니다.
하지만 전략 테스터 의 스프레드는 일정하기 때문에 랜덤 스프레드 에뮬레이터가 필요했습니다. 테스터에서 확산 변화를 에뮬레이트하기 위해 80%의 경우에서 2에서 3포인트(4자리) 범위, 20%에서 3포인트 이상입니다. 이를 구현하는 방법에 대한 아이디어가 있거나 유사한 아이디어가 해결된 링크가 있을 수 있습니다.
마법의 오류는 스톱으로 닫을 때 고문이 자신의 위치가 스톱으로 닫히는 것을 보지 못한다는 사실로 이어집니다. 왜요? 답은 매직 123으로 포지션을 열고 스톱으로 청산을 확인하는 기능에 Magic 변수를 보내는 것입니다. 암시적 초기화와 동일하다고 생각하는 것은 무엇입니까? 영. 당연히 함수에서 마법이 0인 위치가 검색되고 당신의 위치는 123과 같습니다. 그리고 우리는 논쟁하지 않습니다. 하지만 그와 마찬가지로 ... 우리는 엉뚱한 주장을 합니다 ... 정지로 마감에 대한 응답을 확인하십시오.
나는 고문의 나머지 "죽은"논리를 보지 않았습니다. 나는 당신이 stop by close를 확인하는 기능을 처리하는 것을 도왔습니다...
아르템! 안녕하세요! 도움을 주셔서 다시 한 번 감사드립니다.
내가 이해하는 한 불필요한 "죽은" 논리를 모두 제거하고 나머지를 "부활"했습니다.
수정을 도와주신 기능만 거의 남겼습니다.
그런데 제 상상을 초월하는 기적이 일어나기 시작했습니다.
1. 당신의 고문이 각 촛불의 시작 부분에서 거래를 시작하는 형식으로 (저는 5분 있습니다)
지정된 모든 조건을 무시하면서
저것들. 컨트롤이 첫 번째 줄로 이동합니다.
이중 가격=iOpen(Symbol(),0,0);
그리고 왜 11줄을 뛰어 넘어 줄을 쳤는지
로트=0.1;
OrderSend (Symbol(),OP_SELL,1,Bid,Lot,Ask+1500*Point,Ask-300*Point,"jfh",123 );
2. 최소 랏을 계산하는 라인을 제거하면 Lot=MarketInfo(Symbol(), MODE_MINLOT);
EA는 잘 작동 하지만 isCloseLastPosByStop 기능이 작동하지 않습니다.
아주 오랜시간동안 엮어서 뭉쳤는데 헛수고였네요.. 오류가 어디에 숨어있는지 알려주시면 감사하겠습니다.
태양600 :
Артем ! Добрый день! Еще раз спасибо за помощь.
그는 자신의 "죽은 논리"를 모두 제거하고 나머지는 "소생"했습니다 .... 자신의 이해에 따라.
수정을 도와주신 기능만 거의 남겼습니다.
그런데 제 상상을 초월하는 기적이 일어나기 시작했습니다.
후에
본문 { }에 모든 것을 추가
제가 Artem이 아니라서 죄송합니다.
태양600 :
후에
본문 { }에 모든 것을 추가
제가 Artem이 아니라서 죄송합니다.
그래서 t 또는 모두 동일한 로트 ???
태양600 :
후에
본문 { }에 모든 것을 추가
제가 Artem이 아니라서 죄송합니다.
말씀하신대로 했습니다..... 아참, 어드바이저가 작동합니다.... isCloseLastPosByStop 기능이 작동하지 않습니다
다음은 bool isCloseLastPosByStop( string sy, int op, int mn, double &ll) 함수의 코드입니다.
미끄러짐이 3핍이면? 어떻게 든 생각하지 않았습니다))
당신은 이해합니다 - 나는 아직 이것을 귀찮게하지 않습니다 ....
일주일 내내 나는 왜 이 기능이 내가 필요로 하는 대로 작동하지 않는지 이해할 수 없습니다.
즉, 스톱 후에는 스톱으로 마감된 주문의 볼륨의 두 배의 볼륨으로 다음 주문을 열어야 하고, 스톱이 없으면 다음 주문은 평소 볼륨으로 열립니다.
작업 논리를 수정하지 않으면 생각하는 데 오랜 시간이 걸립니다.
다음은 bool isCloseLastPosByStop( string sy, int op, int mn, double &ll) 함수의 코드입니다.
미끄러짐이 3핍이면? 어떻게 든 생각하지 않았습니다))
당신은 이해합니다 - 나는 아직 이것을 귀찮게하지 않습니다 ....
일주일 내내 나는 왜 이 기능이 내가 필요로 하는 대로 작동하지 않는지 이해할 수 없습니다.
즉, 스톱 후에는 스톱으로 마감된 주문의 2배의 볼륨으로 다음 주문을 열어야 하고, 논스톱 후에는 다음 주문이 평소 볼륨으로 열립니다.그리고 왜 주문의 역사를 만지는가 ? 저울을 보세요 - 그 방향으로 어디로 가셔서 많이 바꾸셨어요.
로봇만 인터넷 거래를 한다면.