어쩌면 내가 나를 잘못 표현했을 수도 있습니다. 내가 달성하려는 것은 내 구매 기준이 충족되면 구매를 트리거하고 다른 구매 기준이 다시 충족되면 판매 기준이 충족되면 다른 구매 또는 판매를 트리거하는 것입니다. 그러나 어느 시점에서든 내가 가질 수 있는 최대 거래는 2입니다.
이전에 귀하의 방법을 시도했지만 여전히 동시에 2개의 거래를 여는 시스템이 발생하므로 EA가 동시에 2개의 거래를 여는 것과 동일한 문제로 Bars 기능 으로 제한하려고 했습니다.
여기에 가능한 원인은 무엇입니까? 내 논리와 관련이 있습니까?
문안 인사
테런스
mladen: tkuan77
한 번에 1개의 매수와 1개의 매도 주문을 제한하고 싶었습니다.
따라서 포지션을 개설하기 전에 개설된 주문 카운터에 전화를 걸면 얼마나 많은 개설된 매수 또는 매도를 보유하고 있는지 제어할 수 있습니다.
예:
int openedBuys = countOpened(OP_BUY); if (openedBuys==0) code for open a buy order
openBuys uis가 0이 아닌 경우 새 구매 주문을 열지 않습니다. 판매에도 동일한 논리가 적용됩니다(해당 게시물의 두 번째 예).
어떤 유형의 주문이 현재 바에서 이미 열렸는지 확인하는 기능을 추가할 수 있으며 그렇게 하면 다음 틱에서 새 주문을 열지 못하게 됩니다. 예(현재 막대에서 열린 주문이 있음)인 경우 새 주문을 열지 않습니다. 그렇지 않은 경우 새 주문을 열 수 있습니다. 현재 바에서 열린 리와이어드 유형의 주문을 계산할 수 있는 기능 입니다.
어쩌면 내가 나를 잘못 표현했을 수도 있습니다. 내가 달성하려는 것은 내 구매 기준이 충족되면 구매를 트리거하고 다른 구매 기준이 다시 충족되면 판매 기준이 충족되면 다른 구매 또는 판매를 트리거하는 것입니다. 그러나 어느 시점에서든 내가 가질 수 있는 최대 거래는 2입니다.
이전에 귀하의 방법을 시도했지만 여전히 동시에 2개의 거래를 여는 시스템이 발생하므로 EA가 동시에 2개의 거래를 여는 것과 동일한 문제로 Bars 기능으로 제한하려고 했습니다.
어쩌면 내가 나를 잘못 표현했을 수도 있습니다. 내가 달성하려는 것은 내 구매 기준이 충족되면 구매를 트리거하고 다른 구매 기준이 다시 충족되면 판매 기준이 충족되면 다른 구매 또는 판매를 트리거하는 것입니다. 그러나 어느 시점에서든 내가 가질 수 있는 최대 거래는 2입니다.
이전에 귀하의 방법을 시도했지만 여전히 동시에 2개의 거래를 여는 시스템이 발생하므로 EA가 동시에 2개의 거래를 여는 것과 동일한 문제로 Bars 기능으로 제한하려고 했습니다.
여기에 가능한 원인은 무엇입니까? 내 논리와 관련이 있습니까?
문안 인사
테런스
두 번째 거래가 첫 번째 거래와 어떻게 다른지 지정하지 않았기 때문입니다. 미분은 x 번호의 형태일 수 있습니다. 막대 또는 가격이 FirstBuyPrice에서 멀어집니다.
mladen: 어떤 유형의 주문이 현재 바에서 이미 열렸는지 확인하는 기능을 추가할 수 있으며 그렇게 하면 다음 틱에서 새 주문을 열지 못하게 됩니다. 예(현재 막대에서 열린 주문이 있음)인 경우 새 주문을 열지 않습니다. 그렇지 않은 경우 새 주문을 열 수 있습니다. 현재 바에서 열린 리와이어드 유형의 주문을 계산할 수 있는 기능입니다.
그것 은 기능 입니다 . EA 끝에 게시하고 현재 바에서 주문이 이미 열려 있는지 확인하는 것이 적절하다고 생각되는 곳에 전화를 겁니다.
tkuan77: Mladen에게 도움을 주셔서 감사합니다. 하지만 저는 당신에게 확인하고 싶습니다. 코드를 긴/짧은 함수 앞에 두겠습니까, 그 사이 또는 다른 곳에 넣어야 합니까? 계속 오류가 뜨는 것 같아서 출처를 못찾겠네요. 그리고 MagicNumber는 정수라고 가정합니까?
MQL4에서 사용자 지정 시간 입력
사용자가 정의한 막대에서 시작하여 차트 끝까지 수평선 을 그릴 수 있는 코드를 MQL4로 작성할 수 있습니까?
다음은 Metastock과 동일한 코드입니다.
Dy:=Input("Day",1,31,1);
Mn:=Input("Month",1,12,1);
Yr:=Input("Year",2000,2012,2010);
{Time Calculation}
Time:=Dy=DayOfMonth() AND Mn=Month() AND Yr=Year();
{Formula}
Start:= ValueWhen(1,Time,CLOSE);
{Output}
Start;그리고 여기 결과가 있습니다
MQL4로 같은 일을 하기를 바랍니다.
다음과 같이 시도하십시오.
extern string startFrom = "2012.07.06 00:00";
int init() { return(0); }
int deinit() { ObjectDelete("hLine"); return(0); }
int start()
{
string name = "hLine";
int barShift = iBarShift(NULL,0,StrToTime(startFrom));
ObjectCreate(name,OBJ_TREND,0,0,0,0,0);
ObjectSet(name,OBJPROP_PRICE1,Close);
ObjectSet(name,OBJPROP_PRICE2,Close);
ObjectSet(name,OBJPROP_TIME1,Time);
ObjectSet(name,OBJPROP_TIME2,Time[0]);
return (0);
}일부 지표(이미 작동하는 지표)에 복사하여 붙여넣고 차트에 첨부하기만 하면 됩니다.
사용자가 정의한 막대에서 시작하여 차트 끝까지 수평선을 그릴 수 있는 코드를 MQL4로 작성할 수 있습니까?
다음은 Metastock과 동일한 코드입니다.
Dy:=Input("Day",1,31,1);
Mn:=Input("Month",1,12,1);
Yr:=Input("Year",2000,2012,2010);
{Time Calculation}
Time:=Dy=DayOfMonth() AND Mn=Month() AND Yr=Year();
{Formula}
Start:= ValueWhen(1,Time,CLOSE);
{Output}
Start;그리고 여기 결과가 있습니다
MQL4로 같은 일을 하기를 바랍니다.다음과 같이 시도하십시오.
extern string startFrom = "2012.07.06 00:00";
int init() { return(0); }
int deinit() { ObjectDelete("hLine"); return(0); }
int start()
{
string name = "hLine";
int barShift = iBarShift(NULL,0,StrToTime(startFrom));
ObjectCreate(name,OBJ_TREND,0,0,0,0,0);
ObjectSet(name,OBJPROP_PRICE1,Close);
ObjectSet(name,OBJPROP_PRICE2,Close);
ObjectSet(name,OBJPROP_TIME1,Time);
ObjectSet(name,OBJPROP_TIME2,Time[0]);
return (0);
}당신은 최고 감사합니다 mladen
안녕 믈라덴
여기에서 기능 의 근거에 대해 더 자세히 말씀해 주시겠습니까? 아직 잘 이해가 되지 않습니다. 감사해요
테런스
이 기능을 사용해 보세요.
{
int openedOrders = 0;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == type) openedOrders++;
}
return(openedOrders);
}
[/PHP]
To count opened buy orders, call it like this :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);tkuan77
한 번에 1개의 매수와 1개의 매도 주문을 제한하고 싶었습니다.
따라서 포지션을 개설하기 전에 개설된 주문 카운터에 전화를 걸면 얼마나 많은 개설된 매수 또는 매도를 보유하고 있는지 제어 할 수 있습니다.
예:
openBuys uis가 0이 아닌 경우 새 구매 주문을 열지 않습니다. 판매에도 동일한 논리가 적용됩니다(해당 게시물의 두 번째 예).
안녕 믈라덴
여기에서 기능의 근거에 대해 더 자세히 말씀해 주시겠습니까? 아직 잘 이해가 되지 않습니다. 감사해요
테런스안녕 믈라덴
어쩌면 내가 나를 잘못 표현했을 수도 있습니다. 내가 달성하려는 것은 내 구매 기준이 충족되면 구매를 트리거하고 다른 구매 기준이 다시 충족되면 판매 기준이 충족되면 다른 구매 또는 판매를 트리거하는 것입니다. 그러나 어느 시점에서든 내가 가질 수 있는 최대 거래는 2입니다.
이전에 귀하의 방법을 시도했지만 여전히 동시에 2개의 거래를 여는 시스템이 발생하므로 EA가 동시에 2개의 거래를 여는 것과 동일한 문제로 Bars 기능 으로 제한하려고 했습니다.
여기에 가능한 원인은 무엇입니까? 내 논리와 관련이 있습니까?
문안 인사
테런스
tkuan77
한 번에 1개의 매수와 1개의 매도 주문을 제한하고 싶었습니다.
따라서 포지션을 개설하기 전에 개설된 주문 카운터에 전화를 걸면 얼마나 많은 개설된 매수 또는 매도를 보유하고 있는지 제어할 수 있습니다.
예:
어떤 유형의 주문이 현재 바에서 이미 열렸는지 확인하는 기능을 추가할 수 있으며 그렇게 하면 다음 틱에서 새 주문을 열지 못하게 됩니다. 예(현재 막대에서 열린 주문이 있음)인 경우 새 주문을 열지 않습니다. 그렇지 않은 경우 새 주문을 열 수 있습니다. 현재 바에서 열린 리와이어드 유형의 주문을 계산할 수 있는 기능 입니다.
{
int openedAtBar = 0;
datetime startTime = Time[0];
datetime endTime = Time[0]+Period()*60;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderSymbol() != Symbol()) continue;
if(OrderType() != type) continue;
if(OrderOpenTime()=endTime) continue;
openedAtBar++;
break;
}
return(openedAtBar);
}
안녕 믈라덴
어쩌면 내가 나를 잘못 표현했을 수도 있습니다. 내가 달성하려는 것은 내 구매 기준이 충족되면 구매를 트리거하고 다른 구매 기준이 다시 충족되면 판매 기준이 충족되면 다른 구매 또는 판매를 트리거하는 것입니다. 그러나 어느 시점에서든 내가 가질 수 있는 최대 거래는 2입니다.
이전에 귀하의 방법을 시도했지만 여전히 동시에 2개의 거래를 여는 시스템이 발생하므로 EA가 동시에 2개의 거래를 여는 것과 동일한 문제로 Bars 기능으로 제한하려고 했습니다.
여기에 가능한 원인은 무엇입니까? 내 논리와 관련이 있습니까?
문안 인사
테런스안녕 믈라덴
어쩌면 내가 나를 잘못 표현했을 수도 있습니다. 내가 달성하려는 것은 내 구매 기준이 충족되면 구매를 트리거하고 다른 구매 기준이 다시 충족되면 판매 기준이 충족되면 다른 구매 또는 판매를 트리거하는 것입니다. 그러나 어느 시점에서든 내가 가질 수 있는 최대 거래는 2입니다.
이전에 귀하의 방법을 시도했지만 여전히 동시에 2개의 거래를 여는 시스템이 발생하므로 EA가 동시에 2개의 거래를 여는 것과 동일한 문제로 Bars 기능으로 제한하려고 했습니다.
여기에 가능한 원인은 무엇입니까? 내 논리와 관련이 있습니까?
문안 인사
테런스두 번째 거래가 첫 번째 거래와 어떻게 다른지 지정하지 않았기 때문입니다. 미분은 x 번호의 형태일 수 있습니다. 막대 또는 가격이 FirstBuyPrice에서 멀어집니다.
Mladen에게 도움을 주셔서 감사합니다. 하지만 저는 당신에게 확인하고 싶습니다. 코드를 긴/짧은 함수 앞에 두겠습니까, 그 사이 또는 다른 곳에 넣어야 합니까? 계속 오류가 뜨는 것 같아서 출처를 못찾겠네요. 그리고 MagicNumber는 정수라고 가정합니까?
테런스
총계 = OrdersTotal();
if(총 < 2)
{
int countOpenedOnACurrentBar(int 유형)
{
int 열린AtBar = 0;
날짜/시간 startTime = 시간[0];
날짜/시간 endTime = 시간[0]+Period()*60;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) 중단;
if(OrderMagicNumber() != MagicNumber) 계속;
if(OrderSymbol() != Symbol()) 계속;
if(OrderType() != 유형) 계속;
if(OrderOpenTime()=endTime) 계속;
열린AtBar++;
부서지다;
}
반환(openedAtBar);
}
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"내 EA",12345,0,녹색);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print("구매 주문이 열렸습니다 : ",OrderOpenPrice());
}
else Print("구매 주문 열기 오류: ",GetLastError());
리턴(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"내 EA",12345,0,레드);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print(" SELL 주문 이 열렸습니다 : ",OrderOpenPrice());
}
else Print("판매 주문 열기 오류: ",GetLastError());
반환(0);
}
반환(0);
}
어떤 유형의 주문이 현재 바에서 이미 열렸는지 확인하는 기능을 추가할 수 있으며 그렇게 하면 다음 틱에서 새 주문을 열지 못하게 됩니다. 예(현재 막대에서 열린 주문이 있음)인 경우 새 주문을 열지 않습니다. 그렇지 않은 경우 새 주문을 열 수 있습니다. 현재 바에서 열린 리와이어드 유형의 주문을 계산할 수 있는 기능입니다.
{
int openedAtBar = 0;
datetime startTime = Time[0];
datetime endTime = Time[0]+Period()*60;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderSymbol() != Symbol()) continue;
if(OrderType() != type) continue;
if(OrderOpenTime()=endTime) continue;
openedAtBar++;
break;
}
return(openedAtBar);
}
...
테런스
그것 은 기능 입니다 . EA 끝에 게시하고 현재 바에서 주문이 이미 열려 있는지 확인하는 것이 적절하다고 생각되는 곳에 전화를 겁니다.
Mladen에게 도움을 주셔서 감사합니다. 하지만 저는 당신에게 확인하고 싶습니다. 코드를 긴/짧은 함수 앞에 두겠습니까, 그 사이 또는 다른 곳에 넣어야 합니까? 계속 오류가 뜨는 것 같아서 출처를 못찾겠네요. 그리고 MagicNumber는 정수라고 가정합니까?
테런스
총계 = OrdersTotal();
if(총 < 2)
{
int countOpenedOnACurrentBar(int 유형)
{
int 열린AtBar = 0;
날짜/시간 startTime = 시간[0];
날짜/시간 endTime = 시간[0]+Period()*60;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) 중단;
if(OrderMagicNumber() != MagicNumber) 계속;
if(OrderSymbol() != Symbol()) 계속;
if(OrderType() != 유형) 계속;
if(OrderOpenTime()=endTime) 계속;
열린AtBar++;
부서지다;
}
반환(openedAtBar);
}
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"내 EA",12345,0,녹색);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print("구매 주문이 열렸습니다 : ",OrderOpenPrice());
}
else Print("구매 주문 열기 오류: ",GetLastError());
리턴(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"내 EA",12345,0,레드);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print("판매 주문이 열렸습니다 : ",OrderOpenPrice());
}
else Print("판매 주문 열기 오류: ",GetLastError());
반환(0);
}
반환(0);
}