//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
ResetLastError(); // установим значение предопределенной переменной _LastError в нольif(!PositionSelect(_Symbol))
PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = %lu", _Symbol, GetLastError());
int pos_total = PositionsTotal(); // объявим переменную для хранения количества открытых позицийif(pos_total > 0) // если есть открытые позиции
{
for(int i=0; i<pos_total; i++) // запустим цикл и переберём все открытые позиции
{
if(PositionGetSymbol(i) == _Symbol) // выберем все открытые позиции по текущему символу
{
ulong pos_id = PositionGetInteger(POSITION_IDENTIFIER);
double pos_price = PositionGetDouble(POSITION_PRICE_OPEN);
double pos_tp = PositionGetDouble(POSITION_TP);
double pos_sl = PositionGetDouble(POSITION_SL);
PrintFormat("Позиция #%d цена = %G тейк-профит = %G стоп-лосс = %G", pos_id, pos_price, pos_tp, pos_sl);
}
}
}
}
//+------------------------------------------------------------------+
기존 오픈 포지 션에 추가 포지션(스톱 앤 테이크 없이)을 여는 함수를 만들려고 합니다. 코드를 작성했습니다:
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void Open_Add_Pos_Buyl()
{
for(int i=pos_total-1; i<pos_total; i++) // ищем последнюю по списку открытую позицию
{
PositionGetTicket(i); // получим тикет позиции по индексу в списке открытых позиций
if(PositionGetString(POSITION_SYMBOL) == _Symbol && // если совпадает символ открытой позиции
PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && // если совпадает тип открытой позиции
PositionGetInteger(POSITION_MAGIC) == Magic_Number) // и если совпадет мэджик
{
double pos_price_open=PositionGetDouble(POSITION_PRICE_OPEN); // объявим и инициализируем переменную для цены открытой позиции
if(// тут задано условие для открытия позиции)
{
double new_price_pos=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
trade.Sell(0.01,_Symbol,new_price_pos,0,0);
}
}
}
}
하지만 어떤 이유에서인지 오픈 포지션이 표시되지 않습니다. 디버거로 문제를 찾으려고 했지만 루프를 시작한 후 내부에 작성된 내용을 보지 않고 즉시 함수를 종료합니다. 중단점을 PositionGetTicket(i)에 넣었는데 코드의 어느 부분에 버그가 있는지 다시 알려주시겠습니까?
MrBrooklin 오픈 포지 션에 추가 포지션(스톱 앤 테이크 없이)을 여는 함수를 만들려고 합니다. 코드를 작성했습니다:
하지만 어떤 이유에서인지 오픈 포지션이 표시되지 않습니다. 디버거로 문제를 찾으려고 했지만 루프를 시작한 후 내부에 작성된 내용을 보지 않고 즉시 함수를 종료합니다. PositionGetTicket(i)에 중단점을 설정했는데 코드의 어느 부분에 버그가 있는지 다시 알려주실 수 있나요?
안녕하세요 Alexey, 변수는 pos_total = PositionsTotal()이지만 글로벌 수준에서 설정되었습니다. 이제 함수 내부로 옮겼는데 이것이 문제인 것으로 밝혀졌습니다. 모든 것이 작동했습니다. 무엇이 문제였을까요? 나는 트릭을 전혀 이해하지 못했습니다!!!
이제 실험을 위해 pos_total을 다시 전역 수준으로 옮겼는데 다시 작동이 멈췄지만 함수 안에 넣으면 정상적으로 작동합니다! 적어도 저에게는 기적입니다!!!! )))
이제 알겠습니다. 감사합니다!!! 오픈 포지션이 하나 이상 있으면 오류 코드 4753이 나타나지 않는 것으로 나타났습니다.
안부, 블라디미르.
다음과 같이 작성하면 나타납니다.
다음과 같이 작성하면 표시됩니다.
안녕하세요 Alexey, 한 가지 설명이 있습니다. 루프 대신 PositionSelect() 를 사용해야합니까, 아니면 제가 또 뭔가 잘못 이해 했나요?
안부, 블라디미르.
안녕하세요 Alexey, 한 가지 설명이 있습니다. 루프 대신 PositionSelect() 를 사용해야 하나요, 아니면 제가 또 뭔가 잘못 이해한 건가요?
감사합니다, 블라디미르.
원하는 방식으로 작성할 수 있으며, 가장 중요한 것은 존재하지 않는 문자를 작성하여 오류를 얻는 것입니다 ...
원하는 방식으로 작성할 수 있으며, 가장 중요한 것은 존재하지 않는 문자를 작성하여 오류를 얻는 것입니다.....
하지만 슬리퍼는 던지지 마세요!!! 오류 코드를 얻을 수 없습니다. ((((
안부, 블라디미르.
오류 = "
거기에 지정자가 있어야 합니다.
고마워요 아르템, 성공했어요!!! 모두 정말 감사합니다!
안부, 블라디미르.
요컨대, 여기에 설명 된 문제를 다른 방식으로 해결했습니다:
안부, 블라디미르.
안녕하세요 여러분!
기존 오픈 포지 션에 추가 포지션(스톱 앤 테이크 없이)을 여는 함수를 만들려고 합니다. 코드를 작성했습니다:
하지만 어떤 이유에서인지 오픈 포지션이 표시되지 않습니다. 디버거로 문제를 찾으려고 했지만 루프를 시작한 후 내부에 작성된 내용을 보지 않고 즉시 함수를 종료합니다. 중단점을 PositionGetTicket(i)에 넣었는데 코드의 어느 부분에 버그가 있는지 다시 알려주시겠습니까?
감사합니다, 블라디미르.
하지만 어떤 이유에서인지 오픈 포지션이 표시되지 않습니다. 디버거로 문제를 찾으려고 했지만 루프를 시작한 후 내부에 작성된 내용을 보지 않고 즉시 함수를 종료합니다. PositionGetTicket(i)에 중단점을 설정했는데 코드의 어느 부분에 버그가 있는지 다시 알려주실 수 있나요?
감사합니다, 블라디미르.
pos_total이 무엇인가요?
pos_total은 무엇을 의미하나요?
안녕하세요 Alexey, 변수는 pos_total = PositionsTotal()이지만 글로벌 수준에서 설정되었습니다. 이제 함수 내부로 옮겼는데 이것이 문제인 것으로 밝혀졌습니다. 모든 것이 작동했습니다. 무엇이 문제였을까요? 나는 트릭을 전혀 이해하지 못했습니다!!!
이제 실험을 위해 pos_total을 다시 전역 수준으로 옮겼는데 다시 작동이 멈췄지만 함수 안에 넣으면 정상적으로 작동합니다! 적어도 저에게는 기적입니다!!!! )))
글로벌 레벨의 변수는 함수로 초기화할 수 없다는 것이 밝혀졌나요? 그런가요?
안부, 블라디미르.