Solree : 이에 대해 조금 더 자세히 말씀해 주시겠습니까? 어렵지 않다면 이것으로 코드 조각 :)
다음은 표시기 하위 창의 수직 크기 조정을 설정하기 위한 코드 조각입니다.
// Для буфера развёртки по вертикали.SetIndexBuffer ( 0 , gl_adBufIndicator1); // Индикаторный буфер для стабилизации и размера изображения графика в дополнительном подокне.SetIndexEmptyValue ( 0 , EMPTY_VALUE ); // Устанавливаем значение пустой величины для линии индикатора.SetIndexLabel ( 0 , "VERTICAL SWEEP" ); // Установка имени линии индикатора для отображения информации в окне DataWindow и всплывающей подсказке.SetIndexStyle ( 0 , DRAW_NONE , EMPTY, EMPTY, CLR_NONE ); // Линию не показываем.
//==== Устанавливаем развёртку.if (st_nWBeginChart <= 0 ) st_nWBeginChart = 0 ;
for (i = st_nWFirstVisiblBar; i >= st_nWBeginChart; i--)
{ // Очищаем буфер от лишних значков для вызова окна свойств индикатора.if (i > 0 ) gl_adBufIndicator2[i] = EMPTY_VALUE ;
// Закрепление вертикальной развёртки графика с помощью индикаторного буфера.if (i % 2 == 0 ) gl_adBufIndicator1[i] = gl_dMaxPositionMark; // Для фиксации верхней координаты дополнительного окна.else gl_adBufIndicator1[i] = gl_dMinPositionMark; // Для фиксации нижней координаты дополнительного окна.
}
//==== Расчёт и создание горизонтальных линий разметки.if ((gl_dMaxPositionMark - gl_dMinPositionMark) != tmp_dDifferPosMark) // Создаём один раз и отслеживаем через заданный уровень при увеличениях максимальных уровней.
{ // Расчёт и создание горизонтальных линий разметки.
MakingHorizontalSectoring(AutoStep, Color_LNH, Color_LN0, gl_dMaxPositionMark, gl_dMinPositionMark, Step_LNH, 15 , Style_LNH, Width_LNH, st_nWindow, gl_sFullNameObject);
}
수평선 을 설정하는 기능입니다. 이 기능은 표시기 코드에서만 작동합니다. 라이브러리에서 작동하지 않습니다.
// 2. Функция расчёта и создания горизонтальных линий разметки.void MakingHorizontalSectoring( bool bAutoStep, // Переключатель true/fals = автоматическое/ручное распределение уровней.color clLine, // Цвет уровней.color clLine0, // Цвет нулевого уровня.double dScaleMAX, // Максимальное значение шкалы.double dScaleMIN, // Минимальное значение шкалы.double dStepH, // При AutoStp = true/false - количество линий/растояние между линиями.int nLimiter, // Ограничение десятичных разрядов в вычислениях порядка амплитуды.int nStyle, // Стиль уровней.int nWidth, // Толщина уровней.int nWindow, // Номер подокна для создания нулевой линий.string sName) // Имя для индивидуального имени нулевой горизонтальной линии.
{
double dStepLN = 0 ;
int nExponent = 0 ;
int i = 0 , j = 0 , n = 0 ;
int nLowLevel = 0 ;
int nStep = 0 ;
int nUpLevel = 0 ;
//----if ( 1000000 * dStepH != 0 )
{
if (bAutoStep == true) // Автоматическая установка горизонтальных линий по заданному количеству линий по вертикали.
{
dStepLN = (dScaleMAX - dScaleMIN) / dStepH; // Считаем шаг в виде числа двойной точности.// Вычисление порядка исходного десятичного числа.if (dStepLN * MathPow ( 10 , nLimiter) != 0 ) // Если число меньше единицы. Проверяем на равенство первому разряду.
{
if (dStepLN < 1 )
{
for (nExponent = 0 ; nExponent <= nLimiter; nExponent++)
{
i = dStepLN * MathPow ( 10 , nExponent);
if (i >= 1 ) break ;
}
}
if ( 1 <= dStepLN && dStepLN < 10 ) nExponent = 0 ; // Если число между единицей и десятью. Возвращаем нулевой порядок.if (dStepLN >= 10 ) // Если число больше или равно единицы. Проверяем на равенство первому разряду.
{
for (nExponent = 0 ; nExponent >= -nLimiter; nExponent--)
{
i = dStepLN * MathPow ( 10 , nExponent);
if (i <= 9 ) break ;
}
}
}
else nExponent = 0 ; // Если число с заданной точностью равно нулю.
nStep = MathRound (dStepLN * MathPow ( 10 , nExponent)); // Преобразум шаг в целое число и окруляем его.switch (nStep) // Приводим к стандартному шагу.
{
case1 : nStep = 2 ; break ;
case2 : nStep = 2 ; break ;
case3 : nStep = 2 ; break ;
case4 : nStep = 5 ; break ;
case5 : nStep = 5 ; break ;
case6 : nStep = 5 ; break ;
default : nStep = 10 ;
}
dStepLN = nStep * MathPow ( 10 , -nExponent);
nUpLevel = (dScaleMAX - MathMod (dScaleMAX, dStepLN)) / dStepLN + 1 ; // Верхняя граница шкалы для отсчёта шага.
nLowLevel = (dScaleMIN - MathMod (dScaleMIN, dStepLN)) / dStepLN - 1 ; // Нижняя граница шкалы для отсчёта шага.for (j = nUpLevel; j >= nLowLevel && 1000000 * dStepLN > 0 ; j--, i++) if (j != 0 ) SetLevelValue (i, j * dStepLN);
i++;
for (n = i; n <= 31 ; n++) SetLevelValue (n, (j + 1 ) * dStepLN); // Собираем оставшиеся уровни на последней координате, чтобы не мешались.
}
else// Ручная установка горизонтальных линий по заданному шагу по вертикали.
{
nUpLevel = (dScaleMAX - MathMod (dScaleMAX, dStepH)) / dStepH + 1 ; // Верхняя граница шкалы для отсчёта шага.
nLowLevel = (dScaleMIN - MathMod (dScaleMIN, dStepH)) / dStepH - 1 ; // Нижняя граница шкалы для отсчёта шага.for (j = nUpLevel; j >= nLowLevel && 1000000 * dStepH > 0 ; j--, i++) if (j != 0 ) SetLevelValue (i, j * dStepH);
i++;
for (n = i; n <= 31 ; n++) SetLevelValue (n, (j + 1 ) * dStepLN); // Собираем оставшиеся уровни на последней коордиеате, чтобы не мешались.
}
}
SetLevelStyle (nStyle, nWidth, clLine);
// Удаляем горизонтальную нулевую линию.ObjectDelete (sName + " HLINE 0" );
// Создаём объект "HLINE 0". Этот объект создаётся всегда.ObjectCreate (sName + " HLINE 0" , OBJ_HLINE , nWindow, 0 , 0 );
ObjectSet (sName + " HLINE 0" , OBJPROP_COLOR , clLine0);
ObjectSet (sName + " HLINE 0" , OBJPROP_STYLE , nStyle);
ObjectSet (sName + " HLINE 0" , OBJPROP_WIDTH , nWidth);
}
switch (Tip)
{
case0 :
if (Ask>op+ts* Point )sl=op+d* Point ;
break ;
case1 :
if (Bid<op-ts* Point )sl=op-d* Point ;
}
OrderModify (Ticket,op,sl,takeprofit, 0 );
조건이 참일 때마다 순서를 수정해야 합니다. 어떻게 쓰는지 알려주세요.
추신.
ts= 300 , //-- ts - трейлинг
d= 10 ; //-- d - на 'd' пп передвинуть в безубыток
https://www.mql5.com/ru/code/10672
겁먹을 필요가 없습니다.
나는 "이 고문이 주문을 일괄적으로 마감하지 않도록 하는 방법"에 대한 귀하의 질문에 대한 답변을 썼습니다. -
- 어드바이저가 주문을 일괄 마감하는 것을 방지하기 위해서는 1차 마감 후 주문 마감 주기에서 반품을 해야 합니다.
맞다?
이에 대해 조금 더 자세히 말씀해 주시겠습니까? 어렵지 않다면 이것으로 코드 조각 :)
다음은 표시기 하위 창의 수직 크기 조정을 설정하기 위한 코드 조각입니다.
수평선 을 설정하는 기능입니다. 이 기능은 표시기 코드에서만 작동합니다. 라이브러리에서 작동하지 않습니다.
그래픽 개체로 그리기를 직접 이해합니다. 모든 것이 개별적입니다.
겁먹을 필요가 없습니다.
나는 "이 고문이 주문을 일괄적으로 마감하지 않도록 하는 방법"에 대한 귀하의 질문에 대한 답변을 썼습니다. -
- 어드바이저가 주문을 일괄 마감하는 것을 방지하기 위해서는 1차 마감 후 주문 마감 주기에서 반품을 해야 합니다.
맞다?
반품이 이미 주문 마감 주기에 있는 것을 볼 수 있습니다. 첫 주문 마감은 어디에서 확인하나요?
보시다시피 반품은 이미 주문 마감 주기에 있습니다. 첫 주문 마감은 어디에서 확인하나요?
주문 주기가 아닙니다.
이것은 하나의 주문에 대한 시도의 완고한 검색입니다.
더 멀리 봐
주문 주기가 아닙니다.
이것은 하나의 주문에 대한 시도의 완고한 검색입니다.
더 멀리 봐
여기에 return을 삽입했습니다. 맞아요?
여기에 return을 삽입했습니다. 맞아요?
글쎄, 어떻게 생각해?
코드 베이스에 출판물이 있는 사람을 이 스레드에서 보는 것이 전혀 이상합니다.
여러분, 손익분기점으로 주문을 수정하는 코드를 작성하는 방법.
스톱이 1pp만큼 플러스로 드래그되고 더 이상 만지지 않도록 만들어야합니다.
내 버전에서
조건이 참일 때마다 순서를 수정해야 합니다. 어떻게 쓰는지 알려주세요.
추신.
글쎄, 어떻게 생각해?
코드 베이스에 출판물이 있는 사람을 이 스레드에서 보는 것이 전혀 이상합니다.
나는 또한 결과를 테스트했습니다 - 나는 2 개의 주문을 열었고 이익으로 닫지 않았고 하나 더 열지 않았습니다.
따라서 이 옵션은 적합하지 않습니다.
나는 내 아이디어를 코드 베이스에 게시했고 경험 많은 프로그래머가 조언자를 주문하기 위해 저에게 편지를 썼습니다.
나는 모든 것을 포기합니다. 반환을 어디에 넣어야 할지 모르겠고 모든 곳에 삽입하려고 했습니다.
다음은 표시기 하위 창의 수직 크기 조정을 설정하기 위한 코드 조각입니다.
수평선을 설정하는 기능입니다. 이 기능은 표시기 코드에서만 작동합니다. 라이브러리에서 작동하지 않습니다.
그래픽 개체로 그리기를 직접 이해합니다. 모든 것이 개별적입니다.
나는 또한 결과를 테스트했습니다 - 나는 2 개의 주문을 열었고 이익으로 닫지 않았고 하나 더 열지 않았습니다.
따라서 이 옵션은 적합하지 않습니다.
그래서 우리는 첫 번째 게시물로 돌아갑니다. "... 불완전한 TK"