나를 도우려고 노력하는 모든 사람에게 감사합니다! 당신의 도움의 결과는 이미 거기에 있습니다. 이제 나는 필요한 정보(교과서, 사이트 문서 등)를 의식적으로 찾고 독학을 계속합니다. 이 스크립트에 대한 코드를 작성하기 위해 MQL5 참조만 사용했다는 사실에 특히 주목합니다!
오늘은 New6.mq5 스크립트의 수정 버전인 New7.mq5 스크립트의 코드를 포스팅하려고 합니다. 새 스크립트는 손절매(손절매) 및 이익실현 (이익실현) 수준을 설정하는 기능을 구현합니다. 이 대본에서는 앞서 약속한 대로 프로그래밍 학교 1학년 학생을 위한 접근 가능한 프레젠테이션에서 모든 것을 그리려고 했습니다.
안부 인사를 전합니다. 블라디미르.
//+------------------------------------------------------------------+//| New7.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//---#property script_show_inputs//---/* Продолжаем изучение языка программирования MQL5. В этот раз мы добавим в код скрипта, созданный
нами ранее под именем New6.mq5, возможность устанавливать уровни Stop Loss (остановить убыток)
и Take Profit (взять прибыль). Данные уровни позволят в ходе торговли автоматизировать процесс
ограничения убытков и фиксации прибыли в то время, когда у нас отсутствует возможность находиться
перед торговым терминалом. Во входных параметрах скрипта создадим две переменные: SL (стоп лосс)
и TP (тейк профит). Для них применим модификатор input и тип данных double. Чтобы постоянно не
повторять комментарии, написанные в предыдущем скрипте New6.mq5, мы уберем всё лишнее и будем
пояснять только те участки кода, которые добавим в данном скрипте. Итак, приступим. По нашей
задумке нужно написать часть кода скрипта, который будет отвечать за Stop Loss и Take Profit.
Снова обращаемся к Справочнику MQL5, в котором ищем раздел MqlTradeRequest. В нём мы находим
информацию о том, что необходимо создать ещё два запроса: request.sl (для уровня Stop Loss ордера)
и request.tp (для уровня Take Profit ордера). Дописываем в скрипт недостающие части кода.*//* Добавим в код скрипта необходимые переменные SL и TP.*/inputdouble SL= 300 ; //Стоп лоссinputdouble TP= 500 ; //Тейк профит//---inputint Distance= 100 ; //Отступ отложенного ордера от текущей ценыinputdouble Lots= 0.01 ; //Фиксированный размер лотаinputlong Pending_magic= 86513 ; //Магический номер ордера//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart ()
{
MqlTradeRequest request= { 0 };
MqlTradeResult result= { 0 };
request.action= TRADE_ACTION_PENDING ;
request.symbol= Symbol ();
request.volume=Lots;
request.deviation= 2 ;
request.magic=Pending_magic;
double price;
double point= SymbolInfoDouble ( _Symbol , SYMBOL_POINT );
int digits=( int ) SymbolInfoInteger ( _Symbol , SYMBOL_DIGITS );
{
request.type= ORDER_TYPE_BUY_STOP ;
price= SymbolInfoDouble ( Symbol (), SYMBOL_ASK )+Distance*point;
request.price= NormalizeDouble (price,digits);
/* Теперь создаем два запроса на торговый сервер: request.sl и request.tp, в котором указываем, где
должны находиться уровни стоп лосс и тейк профит относительно цены отложенного ордера "BUY_STOP".
Уровень SL должен быть ниже цены (поэтому пишем price-SL*point), а уровень TP должен быть выше цены
(поэтому пишем price+TP*point). Для нормализации уровней SL и TP мы применим функцию преобразования
данных NormalizeDouble, где обязательно умножим каждый из уровней на point (размер одного пункта)
и укажем digits (количество знаков после запятой).*/
request.sl= NormalizeDouble (price-SL*point,digits);
request.tp= NormalizeDouble (price+TP*point,digits);
//---
}
if (! OrderSend (request,result))
PrintFormat ( "OrderSend error %d" , GetLastError ());
PrintFormat ( "retcode=%u deal=%I64u order=%I64u" ,result.retcode,result.deal,result.order);
{
request.type= ORDER_TYPE_SELL_STOP ;
price= SymbolInfoDouble ( Symbol (), SYMBOL_BID )-Distance*point;
request.price= NormalizeDouble (price,digits);
/* Точно также создадим ещё два новых запроса на торговый сервер: request.sl и request.tp, в котором укажем,
где должны находиться уровни стоп лосс и тейк профит относительно цены отложенного ордера "SELL_STOP".
Уровень SL теперь должен находиться выше цены (поэтому пишем price+SL*point), а уровень TP должен
находиться ниже цены (поэтому пишем price-TP*point). Снова для нормализации уровней SL и TP мы применим
функцию преобразования данных NormalizeDouble, где обязательно умножим каждый из уровней на point (размер
одного пункта) и укажем digits (количество знаков после запятой).*/
request.sl= NormalizeDouble (price+SL*point,digits);
request.tp= NormalizeDouble (price-TP*point,digits);
}
if (! OrderSend (request,result))
PrintFormat ( "OrderSend error %d" , GetLastError ());
PrintFormat ( "retcode=%u deal=%I64u order=%I64u" ,result.retcode,result.deal,result.order);
}
/* Всё! Наш новый скрипт готов. Компилируем и запускаем скрипт. Как компилировать и запускать скрипт мы
уже узнали, когда создавали скрипт New2.mq5.*///+------------------------------------------------------------------+
나를 도우려고 노력하는 모든 사람에게 감사합니다! 당신의 도움의 결과는 이미 거기에 있습니다. 이제 나는 필요한 정보(교과서, 사이트 문서 등)를 의식적으로 찾고 독학을 계속합니다. 이 스크립트에 대한 코드를 작성하기 위해 MQL5 참조만 사용했다는 사실에 특히 주목합니다!
오늘은 New6.mq5 스크립트의 수정 버전인 New7.mq5 스크립트의 코드를 포스팅하려고 합니다. 새 스크립트는 손절매(손절매) 및 이익실현 (이익실현) 수준을 설정하는 기능을 구현합니다. 이 대본에서는 앞서 약속한 대로 프로그래밍 학교 1학년 학생을 위한 접근 가능한 프레젠테이션에서 모든 것을 그리려고 했습니다.
안부 인사를 전합니다. 블라디미르.
코드에 다음 줄이 있습니다.
#define orderType1 "BUY_STOP"//Тип ордера UP
이는 코드에서 'orderType1'이 발견되면 "BUY_STOP"으로 대체됨을 의미합니다.
New6.mq5 스크립트에서 저는 다음과 같은 조건 을 썼습니다. "입력 대신에 Buy Stop 및 Sell Stop 보류 중인 주문의 경우 새로운 #define 지시문을 사용할 것입니다. 이를 통해 스크립트 코드에서 보류 주문의 필수 유형이지만 실행 시 스크립트의 입력 매개변수에 표시되지 않습니다. 보류 주문 orderType1 및 orderType2의 유형을 정의하는 변수를 설정합시다. 이름 "BUY_STOP"을 작성하고 이 변수의 경우 "SELL_STOP"입니다.
... 여기 사람들은 한 번 새 이민자를 돕습니다.
좋은 하루와 좋은 분위기 모두!
나를 도우려고 노력하는 모든 사람에게 감사합니다! 당신의 도움의 결과는 이미 거기에 있습니다. 이제 나는 필요한 정보(교과서, 사이트 문서 등)를 의식적으로 찾고 독학을 계속합니다. 이 스크립트에 대한 코드를 작성하기 위해 MQL5 참조만 사용했다는 사실에 특히 주목합니다!
오늘은 New6.mq5 스크립트의 수정 버전인 New7.mq5 스크립트의 코드를 포스팅하려고 합니다. 새 스크립트는 손절매(손절매) 및 이익실현 (이익실현) 수준을 설정하는 기능을 구현합니다. 이 대본에서는 앞서 약속한 대로 프로그래밍 학교 1학년 학생을 위한 접근 가능한 프레젠테이션에서 모든 것을 그리려고 했습니다.
안부 인사를 전합니다. 블라디미르.
좋은 하루와 좋은 분위기 모두!
나를 도우려고 노력하는 모든 사람에게 감사합니다! 당신의 도움의 결과는 이미 거기에 있습니다. 이제 나는 필요한 정보(교과서, 사이트 문서 등)를 의식적으로 찾고 독학을 계속합니다. 이 스크립트에 대한 코드를 작성하기 위해 MQL5 참조만 사용했다는 사실에 특히 주목합니다!
오늘은 New6.mq5 스크립트의 수정 버전인 New7.mq5 스크립트의 코드를 포스팅하려고 합니다. 새 스크립트는 손절매(손절매) 및 이익실현 (이익실현) 수준을 설정하는 기능을 구현합니다. 이 대본에서는 앞서 약속한 대로 프로그래밍 학교 1학년 학생을 위한 접근 가능한 프레젠테이션에서 모든 것을 그리려고 했습니다.
안부 인사를 전합니다. 블라디미르.
코드에 다음 줄이 있습니다.
이는 코드에서 'orderType1'이 발견되면 "BUY_STOP"으로 대체됨을 의미합니다.
즉, 줄 대신:
다음과 같은 줄이 있을 것입니다.
그게 정말 당신이 원하는 것입니까?
코드에 다음 줄이 있습니다.
이는 코드에서 'orderType1'이 발견되면 "BUY_STOP"으로 대체됨을 의미합니다.
즉, 줄 대신:
다음과 같은 줄이 있을 것입니다.
그게 정말 당신이 원하는 것입니까?
이제 문서를 더 자세히 읽은 다음 답변하겠습니다.
안부 인사를 전합니다. 블라디미르.
Koldun Zloy :
... 그게 정말 당신이 원하는 것입니까?
현재 "예"입니다.
안부 인사를 전합니다. 블라디미르.
현재 "예"입니다.
여기 그들이 온다...
여기 그들이 온다...
현재 "예"입니다.
안부 인사를 전합니다. 블라디미르.
이것은 좀 더 자세히 기술해야 할 요점입니다. 이것은 물론 작동하는 옵션이지만 너무 예상치 못한 것입니다))))
먼저 스크립트가 수행할 작업, 즉 도식적 알고리즘에 대한 설명을 제공하는 것이 좋습니다. 더 적은 질문과 더 구체적인 의견이 있을 것입니다)
현재 "예"입니다.
안부 인사를 전합니다. 블라디미르.
글쎄, 내가 당신에게 무엇에 대해 이야기 했습니까?))) 기지가 있어야하고 다시 기지가 있어야합니다. 먼저 3~4개월 동안 교과서를 읽고/개요한 다음, 무언가를 씁니다. 1년이면 OOP를 시작할 수 있습니다.
예, 기초까지가 아닙니다. 남자는 머리에 혼란이 있습니다. 배는 바닥에 갔지만 돛은 부지런히 그것에 매달려 있습니다 (이익을 취하고, 손실을 막고, 미래에 후행).
기본적으로 위의 조건은 2 = 2와 같이 항상 참입니다. 따라서 if(조건문)는 여기에서 작동하지 않으며 컴파일러는 이러한 코드에 대해 경고를 발행합니다.
이제 지점의 작성자는 Peter, 당신의 조언을 따라야 하고 "내가 보기에 나는 예술가다!"라고 말해야 합니다.
여기 그들이 온다...
그런 반응 이후로 뭔가 잘못 이해했을 가능성이 큽니다.
New6.mq5 스크립트에서 저는 다음과 같은 조건 을 썼습니다. "입력 대신에 Buy Stop 및 Sell Stop 보류 중인 주문의 경우 새로운 #define 지시문을 사용할 것입니다. 이를 통해 스크립트 코드에서 보류 주문의 필수 유형이지만 실행 시 스크립트의 입력 매개변수에 표시되지 않습니다. 보류 주문 orderType1 및 orderType2의 유형을 정의하는 변수를 설정합시다. 이름 "BUY_STOP"을 작성하고 이 변수의 경우 "SELL_STOP"입니다.
이 조건 을 구현하는 측면에서 내가 무엇을 잘못했는지 말해달라고 요청합니다.
안부 인사를 전합니다. 블라디미르.