알려주십시오: 주문이 매일 열리지 않고, 후행이 작동하지 않으며, 열린 주문이 TP에 따라 마감되지 않습니다. 내가 뭘 잘못했어?
input int StartHour = 23; // Время ачало торговли input int TakeProfit = 40; // TakeProfit input int StopLoss = 40; // StopLoss input int Lots = 0.1; // Лот для торговли input int Magic = 22; // Магическое число input int Trals = 20; // Дистанция тралинга в пунктах input int _Step = 1; // Шаг input bool _StepUse = true; // Использовать шаг или нет
알려주십시오: 주문이 매일 열리지 않고, 후행이 작동하지 않으며, 열린 주문이 TP에 따라 마감되지 않습니다. 내가 뭘 잘못했어?
input int StartHour = 23; // Время ачало торговли input int TakeProfit = 40; // TakeProfit input int StopLoss = 40; // StopLoss input int Lots = 0.1; // Лот для торговли input int Magic = 22; // Магическое число input int Trals = 20; // Дистанция тралинга в пунктах input int _Step = 1; // Шаг input bool _StepUse = true; // Использовать шаг или нет
void OnTick() { ......
if (IsFirstTick == true)
IsFirstTick = 거짓;
이것은 내가 교체 할 부분입니다
if (TM!=Time[ 0 ])
{
TM = Time[ 0 ];
......
}
여기서 TM 변수는 OnTick() 함수 외부에서 DateTime으로 선언됩니다. 즉, 이 모듈의 전역 변수입니다.
이 코드는 명확하지 않습니다. if(Open[0] < Open[StartHour])
StartHour는 23이고 0바의 시가를 23번째 바 백의 시가와 비교하고 있는 것으로 나타났습니다. 글쎄요, 아마도 이것이 고문의 그런 기능일 것입니다.
그러나 이 디자인은 전혀 작동하지 않습니다.
res= OrderSelect (ticket, SELECT_BY_TICKET);
if (res == true )
{
if (OrderCloseTime() == 0 )
{
bool res2;
res2 = OrderClose(ticket, Lots, OrderClosePrice(), 10 );
if (res2 == false )
{
Alert ( "Error Closing Order #" , ticket);
} Alert ( "Closing Order #" , ticket);
}
}
티켓 변수가 0과 같거나 어드바이저가 다시 초기화되었고 이 변수가 기본적으로 재설정된 경우?
MIR_KAZAN : StartHour는 EA가 작동해야 하는 시간입니다. 그곳은 자정이어야 합니다. 트롤링이 작동하지 않는 이유는 무엇입니까?
코드가 작동하지 않는 이유를 이해하려면 코드를 분석해야 합니다.
인쇄 (" Tralling_Stop ") 함수를 Tralling_Stop() 함수에 삽입하고 이 메시지(Tralling_Stop)가 로그에 있는지 확인하고, 없으면 이 함수가 호출되지 않습니다. 그렇다면 Tralling_Stop() 함수 자체를 분석하십시오. 아마도 그 안에 몇 가지 논리적 오류가 있을 수 있습니다.
일반적으로 논리적인 if 조건이 있는 곳에 Print(" condition 1" working), Print(" condition 2" works) 등을 삽입합니다. 테스터에서 Expert Advisor를 실행하면 로그에서 Expert Advisor의 논리를 추적할 수 있습니다.
인쇄 (" Tralling_Stop ") 함수를 Tralling_Stop() 함수에 삽입하고 이 메시지(Tralling_Stop)가 로그에 있는지 확인하고, 없으면 이 함수가 호출되지 않습니다. 그렇다면 Tralling_Stop() 함수 자체를 분석하십시오. 아마도 그 안에 몇 가지 논리적 오류가 있을 수 있습니다.
일반적으로 논리적인 if 조건이 있는 곳에 Print(" condition 1" working), Print(" condition 2" works) 등을 삽입합니다. 테스터에서 Expert Advisor를 실행하면 로그에서 Expert Advisor의 논리를 추적할 수 있습니다.
다시 작성하려고 했지만 여전히 원하는 대로 작동하지 않습니다. 필요할 때 주문이 열리지 않거나 트롤이 작동하지 않습니다. 아이디어에 따르면 어드바이저는 다음과 같이 작업해야 합니다. 그날의 마지막 양초가 닫힐 때(현재는 00:00시), 고(매수) 및 저가(저가)에 대해 두 번의 지연을 열어야 합니다. (마을용) 그런 다음 그냥 트롤하십시오. 하루가 지나면 모든 것이 반복됩니다.
input int StartHour = 1; // Начало торговли input int TakeProfit = 40; // TakeProfit input int StopLoss = 10; // StopLoss extern double Lots = 0.1; // Лот для торговли input int Magic = 22; // Магическое число input int Trals = 5; // Дистанция тралинга в пунктах input int _Step = 1; // Шаг input bool _StepUse = false; // Использовать шаг или неT
void OnTick() { static bool IsFirstTick = false;
Trailing();
if (StartHour != Hour()) { return;} if (OrdersTotal()>0) { OrderSend(Symbol(), OP_BUYLIMIT, Lots, High[1],10, Low[1]-StopLoss*Point, High[1]+TakeProfit*Point,"Set bu ForexRobot",Magic); OrderSend(Symbol(), OP_SELLLIMIT, Lots, Low[1],10, High[1]+StopLoss*Point, Low[1]+TakeProfit*Point,"Set bu ForexRobot",Magic); } }
//+------------------------------------------------------------------+ void Trailing() { if (_StepUse) { for (int trall=0; trall<OrdersTotal(); trall++) { if (!(OrderSelect(trall, SELECT_BY_POS, MODE_TRADES))) continue; if (OrderSymbol() != Symbol()) continue;
if (StartHour != TimeHour(Time[ 0 ])) { return ;} //Если час текущей свечи не равен StartHour то выход из функции и тогда ниже написанный код выполнятся не будет, в том числе и трейлинг стоп.
if ( OrdersTotal ()> 0 )
{
....
}
로 교체되다:
if ( OrdersTotal ()== 0 )
{
bool rezult = false ;
rezult= OrderSend ( Symbol (), OP_BUYLIMIT, Lots, High[ 1 ], 10 , Low[ 1 ]-StopLoss* Point , High[ 1 ]+TakeProfit* Point , "Set bu ForexRobot" ,Magic);
if (!rezult) Print ( "Ошибка открытия ордера BUY LIMIT" );
rezult = OrderSend ( Symbol (), OP_SELLLIMIT, Lots, Low[ 1 ], 10 , High[ 1 ]+StopLoss* Point , Low[ 1 ]+TakeProfit* Point , "Set bu ForexRobot" ,Magic);
if (!rezult) Print ( "Ошибка открытия ордера SELL LIMIT" );
//для работы в реале надо сделать более детальную проверку ошибок
} else Trailing();
또한 NormalizeDouble() 함수 를 사용하여 가격을 정규화해야 합니다. 즉, Low[1]-StopLoss*Point 대신에 NormalizeDouble(Low[1]-StopLoss*Point,Digits())를 작성해야 합니다.
또한 코드로 판단하면 _StepUse 변수가 false이면 후행 중지가 작동하지 않습니다. 후행() 함수 코드를 자세히 살펴보십시오.
void Trailing()
{
if ( _StepUse ) //если false то код внутри скобок выполнятся не будет.
{
......
}
}// Скорее всего вы этот код просто бездумно скопировали от куда нибудь, даже не понимая как он работает.
작동합니다. 그리고 테스트할 때 이 새끼는 주문도 안 닫는다((((((사진은 가격이 테이크를 넘어 어떻게 돌아갔는지 보여주고, 그는 손실로 감염을 닫았다!)
그가 왜 이러는 거지?
나는 Vkontakte가 없습니다.
이익실현 및 손절매 주문의 실행 은 고문에 의존하지 않고 브로커의 서버에서 실행됩니다. EA는 테이크 앤 스톱만 설정하고 실행하지는 않습니다. 가격이 이 값에 도달한 후 이익실현이 설정되었는지 확인합니다. 즉, 처음에 주문이 열리면 가격이 앞뒤로 움직인 다음 이익실현이 설정됩니다.
이익실현 및 손절매 주문의 실행 은 고문에 의존하지 않고 브로커의 서버에서 실행됩니다. EA는 테이크 앤 스톱만 설정하고 실행하지는 않습니다. 가격이 이 값에 도달한 후 이익실현이 설정되었는지 확인합니다. 즉, 처음에 주문이 열리면 가격이 앞뒤로 움직인 다음 이익실현이 설정됩니다.
SL에 이전 양초의 고가와 이전 양초의 고가 + TakeProfit의 TP가 포함되도록 TP를 OrderSend, Sl에 삽입하는 방법은 무엇입니까?
도움이 필요하다.
http://forum.mql4.com/en/67309#1011467
알려주십시오: 주문이 매일 열리지 않고, 후행이 작동하지 않으며, 열린 주문이 TP에 따라 마감되지 않습니다. 내가 뭘 잘못했어?
input int StartHour = 23; // Время ачало торговли
input int TakeProfit = 40; // TakeProfit
input int StopLoss = 40; // StopLoss
input int Lots = 0.1; // Лот для торговли
input int Magic = 22; // Магическое число
input int Trals = 20; // Дистанция тралинга в пунктах
input int _Step = 1; // Шаг
input bool _StepUse = true; // Использовать шаг или нет
void OnTick()
{
static bool IsFirstTick = false;
static int ticket = 0;
double lot=Lot_Normalize(Symbol(),Lots,1);
double sl= Dist_Normalize(Symbol(),Trals);
double step= Dist_Normalize(Symbol(),_Step);
int h= TimeHour(TimeCurrent());
if(h == StartHour)
{
Alert("TimeHor: ", h);
if (IsFirstTick == true)
IsFirstTick = false;
bool res;
res= OrderSelect(ticket, SELECT_BY_TICKET);
if(res == true)
{
if(OrderCloseTime() == 0)
{
bool res2;
res2 = OrderClose(ticket, Lots, OrderClosePrice(), 10);
if(res2 == false)
{
Alert("Error Closing Order #", ticket);
} Alert("Closing Order #", ticket);
}
}
if(Open[0] < Open[StartHour])
{
ticket = OrderSend(Symbol(), OP_BUYLIMIT, Lots, High[1],10, Low[1]-StopLoss*Point, High[1]+TakeProfit*Point,"Set bu ForexRobot");
Tralling_Stop(OrderSymbol(),Magic,sl,step,_StepUse);
if(ticket < 0)
{
Alert("Error Sending Order!");
} Alert("Sending Order! BUY_LIMIT");
}
else
{
ticket = OrderSend(Symbol(), OP_SELLLIMIT, Lots, Low[1],10, High[1]+StopLoss*Point, Low[1]+TakeProfit*Point,"Set bu ForexRobot");
Tralling_Stop(OrderSymbol(),Magic,sl,step,_StepUse);
if(ticket < 0)
{
Alert("Error Sending Order!");
} Alert("Sending Order! SEL_LLIMIT");
}
}
}
double Dist_Normalize(string Smv, int _Distancia)
{
int Dig= int(MarketInfo(Smv,MODE_DIGITS));
double Pip=MarketInfo(Smv,MODE_POINT);
if(Dig==3 || Dig==5)
return NormalizeDouble(_Distancia*10*Pip,Dig);
else return NormalizeDouble(_Distancia*Pip,Dig);
}
double Lot_Normalize(string Smv, double _lot, double _mult)
{
double minlot=MarketInfo(Smv,MODE_MINLOT);
double maxlot=MarketInfo(Smv,MODE_MAXLOT);
double steplot=MarketInfo(Smv,MODE_LOTSTEP);
double lot= _lot*_mult;
if(lot<=minlot) lot+minlot;
else if(lot>=maxlot) lot=minlot;
else if(lot>minlot && lot<maxlot)
{
int k=int((lot-minlot)/steplot);
lot=NormalizeDouble(minlot+k*steplot,2);
}
return(lot);
}
void Tralling_Stop(string Smv, int _Magic, double _Tral, double _Step, bool _Step_Use)
{
int Dig=int(MarketInfo(_Symbol,MODE_DIGITS));
for(int pos=OrdersTotal()-1; pos>=0;pos--)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Smv &&
OrderMagicNumber()==_Magic && OrderType()<2)
{
double SLPrice;
if(OrderType()==OP_BUY)
{
if(_Step_Use)
{
RefreshRates();
if(NormalizeDouble(Ask-OrderStopLoss(),Dig)>NormalizeDouble(_Tral+_Step,Dig))
{
SLPrice=NormalizeDouble(Ask-_Tral,Dig);
if(!OrderModify(OrderTicket(),0,SLPrice,OrderTakeProfit(),OrderExpiration(),clrRed))
Alert("Error modifi Order!: ",GetLastError());
}
}
else
{
RefreshRates();
if(NormalizeDouble(Ask-OrderStopLoss(),Dig)>NormalizeDouble(_Tral,Dig))
{
SLPrice=NormalizeDouble(Bid+_Tral,Dig);
if(!OrderModify(OrderTicket(),0,SLPrice,OrderTakeProfit(),OrderExpiration(),clrRed))
Alert("Error modifi Order!: ",GetLastError());
}
}
}
}
}
}
알려주십시오: 주문이 매일 열리지 않고, 후행이 작동하지 않으며, 열린 주문이 TP에 따라 마감되지 않습니다. 내가 뭘 잘못했어?
input int StartHour = 23; // Время ачало торговли
input int TakeProfit = 40; // TakeProfit
input int StopLoss = 40; // StopLoss
input int Lots = 0.1; // Лот для торговли
input int Magic = 22; // Магическое число
input int Trals = 20; // Дистанция тралинга в пунктах
input int _Step = 1; // Шаг
input bool _StepUse = true; // Использовать шаг или нет
void OnTick()
{
......
IsFirstTick = 거짓;
이것은 내가 교체 할 부분입니다
여기서 TM 변수는 OnTick() 함수 외부에서 DateTime으로 선언됩니다. 즉, 이 모듈의 전역 변수입니다.
이 코드는 명확하지 않습니다. if(Open[0] < Open[StartHour])
StartHour는 23이고 0바의 시가를 23번째 바 백의 시가와 비교하고 있는 것으로 나타났습니다. 글쎄요, 아마도 이것이 고문의 그런 기능일 것입니다.
그러나 이 디자인은 전혀 작동하지 않습니다.
티켓 변수가 0과 같거나 어드바이저가 다시 초기화되었고 이 변수가 기본적으로 재설정된 경우?
StartHour는 EA가 작동해야 하는 시간입니다. 그곳은 자정이어야 합니다. 트롤링이 작동하지 않는 이유는 무엇입니까?
코드가 작동하지 않는 이유를 이해하려면 코드를 분석해야 합니다.
인쇄 (" Tralling_Stop ") 함수를 Tralling_Stop() 함수에 삽입하고 이 메시지(Tralling_Stop)가 로그에 있는지 확인하고, 없으면 이 함수가 호출되지 않습니다. 그렇다면 Tralling_Stop() 함수 자체를 분석하십시오. 아마도 그 안에 몇 가지 논리적 오류가 있을 수 있습니다.
일반적으로 논리적인 if 조건이 있는 곳에 Print(" condition 1" working), Print(" condition 2" works) 등을 삽입합니다. 테스터에서 Expert Advisor를 실행하면 로그에서 Expert Advisor의 논리를 추적할 수 있습니다.
코드가 작동하지 않는 이유를 이해하려면 코드를 분석해야 합니다.
인쇄 (" Tralling_Stop ") 함수를 Tralling_Stop() 함수에 삽입하고 이 메시지(Tralling_Stop)가 로그에 있는지 확인하고, 없으면 이 함수가 호출되지 않습니다. 그렇다면 Tralling_Stop() 함수 자체를 분석하십시오. 아마도 그 안에 몇 가지 논리적 오류가 있을 수 있습니다.
일반적으로 논리적인 if 조건이 있는 곳에 Print(" condition 1" working), Print(" condition 2" works) 등을 삽입합니다. 테스터에서 Expert Advisor를 실행하면 로그에서 Expert Advisor의 논리를 추적할 수 있습니다.
다시 작성하려고 했지만 여전히 원하는 대로 작동하지 않습니다. 필요할 때 주문이 열리지 않거나 트롤이 작동하지 않습니다. 아이디어에 따르면 어드바이저는 다음과 같이 작업해야 합니다. 그날의 마지막 양초가 닫힐 때(현재는 00:00시), 고(매수) 및 저가(저가)에 대해 두 번의 지연을 열어야 합니다. (마을용) 그런 다음 그냥 트롤하십시오. 하루가 지나면 모든 것이 반복됩니다.
input int StartHour = 1; // Начало торговли
input int TakeProfit = 40; // TakeProfit
input int StopLoss = 10; // StopLoss
extern double Lots = 0.1; // Лот для торговли
input int Magic = 22; // Магическое число
input int Trals = 5; // Дистанция тралинга в пунктах
input int _Step = 1; // Шаг
input bool _StepUse = false; // Использовать шаг или неT
void OnTick()
{
static bool IsFirstTick = false;
Trailing();
if (StartHour != Hour()) { return;}
if (OrdersTotal()>0)
{
OrderSend(Symbol(), OP_BUYLIMIT, Lots, High[1],10, Low[1]-StopLoss*Point, High[1]+TakeProfit*Point,"Set bu ForexRobot",Magic);
OrderSend(Symbol(), OP_SELLLIMIT, Lots, Low[1],10, High[1]+StopLoss*Point, Low[1]+TakeProfit*Point,"Set bu ForexRobot",Magic);
}
}
//+------------------------------------------------------------------+
void Trailing()
{
if (_StepUse)
{
for (int trall=0; trall<OrdersTotal(); trall++) {
if (!(OrderSelect(trall, SELECT_BY_POS, MODE_TRADES))) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderType() == OP_BUY ) {
if (Bid-OrderOpenPrice() > StopLoss*Point || OrderMagicNumber()==Magic) {
if (OrderStopLoss() < Bid-(StopLoss+_Step-1)*Point || OrderStopLoss() == 0) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-StopLoss*Point, OrderTakeProfit(), 0, Blue);
}
}
}
if (OrderType() == OP_SELL) {
if (OrderOpenPrice()-Ask > StopLoss*Point || OrderMagicNumber()==Magic) {
if (OrderStopLoss() > Ask+(StopLoss+_Step-1)*Point || OrderStopLoss() == 0) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+StopLoss*Point, OrderTakeProfit(), 0, Blue);
}
}
}
}
}
}
//+------------------------------------------------------------------+
노력하다
로 교체되다:
로 교체되다:
또한 NormalizeDouble() 함수 를 사용하여 가격을 정규화해야 합니다. 즉, Low[1]-StopLoss*Point 대신에 NormalizeDouble(Low[1]-StopLoss*Point,Digits())를 작성해야 합니다.
또한 코드로 판단하면 _StepUse 변수가 false이면 후행 중지가 작동하지 않습니다. 후행() 함수 코드를 자세히 살펴보십시오.
노력하다
로 교체되다:
로 교체되다:
또한 NormalizeDouble() 함수 를 사용하여 가격을 정규화해야 합니다. 즉, Low[1]-StopLoss*Point 대신에 NormalizeDouble(Low[1]-StopLoss*Point,Digits())를 작성해야 합니다.
또한 코드로 판단하면 _StepUse 변수가 false이면 후행 중지가 작동하지 않습니다. 후행() 함수 코드를 자세히 살펴보십시오.
연락 중이신가요? 나에게 http://vk.com/computerwizard116을 써주세요. 나는 더 이상 고문의 문제를 해결하는 방법을 모릅니다. 데모 계정에서 이 전략으로 일주일 동안 작업했습니다.
작동합니다. 그리고 테스트할 때 이 새끼는 주문도 안 닫는다((((((사진은 가격이 테이크를 넘어 어떻게 돌아갔는지 보여주고, 그는 손실로 감염을 닫았다!)
그가 왜 이러는 거지?
연락 중이신가요? 나에게 http://vk.com/computerwizard116을 써주세요. 나는 더 이상 고문의 문제를 해결하는 방법을 모릅니다. 데모 계정에서 이 전략으로 일주일 동안 작업했습니다.
작동합니다. 그리고 테스트할 때 이 새끼는 주문도 안 닫는다((((((사진은 가격이 테이크를 넘어 어떻게 돌아갔는지 보여주고, 그는 손실로 감염을 닫았다!)
그가 왜 이러는 거지?
나는 Vkontakte가 없습니다.
이익실현 및 손절매 주문의 실행 은 고문에 의존하지 않고 브로커의 서버에서 실행됩니다. EA는 테이크 앤 스톱만 설정하고 실행하지는 않습니다. 가격이 이 값에 도달한 후 이익실현이 설정되었는지 확인합니다. 즉, 처음에 주문이 열리면 가격이 앞뒤로 움직인 다음 이익실현이 설정됩니다.
나는 Vkontakte가 없습니다.
이익실현 및 손절매 주문의 실행 은 고문에 의존하지 않고 브로커의 서버에서 실행됩니다. EA는 테이크 앤 스톱만 설정하고 실행하지는 않습니다. 가격이 이 값에 도달한 후 이익실현이 설정되었는지 확인합니다. 즉, 처음에 주문이 열리면 가격이 앞뒤로 움직인 다음 이익실현이 설정됩니다.