경적 06.02.05 06:45 MessageBox를 사용하여 표시기를 느리게 만드는 아이디어는 훌륭합니다. 나는 아마 결코 추측하지 않았을 것이다. 대화식 주문에 대한 많은 가능성을 열어줍니다. 존경합니다, 콤포스터! 구현을 비판하는 개인의 경우 구현이 "원시"라고 말할 때 무엇을 기준으로 하는지 완전히 명확하지 않습니다. 나는 많은 사람들이 대기 중인 주문을 하기 위해 스크립트로 작업하는 것이 매우 편리하다는 것을 알게 될 것이라고 확신합니다.
혼, 내 생각대로 말했고, 누구에게도 꾸짖지 않았다. 그러니 다음에 글을 쓸 생각이 있을 때 한번 생각해 보시기 바랍니다. 행운을 빕니다 :)
그는 무엇을합니까? 그리고 그것을 사용하는 방법?
미리 감사합니다
경적 06.02.05 06:45
MessageBox를 사용하여 표시기를 느리게 만드는 아이디어는 훌륭합니다. 나는 아마 결코 추측하지 않았을 것이다. 대화식 주문에 대한 많은 가능성을 열어줍니다. 존경합니다, 콤포스터!
구현을 비판하는 개인의 경우 구현이 "원시"라고 말할 때 무엇을 기준으로 하는지 완전히 명확하지 않습니다.
나는 많은 사람들이 대기 중인 주문을 하기 위해 스크립트로 작업하는 것이 매우 편리하다는 것을 알게 될 것이라고 확신합니다.
혼, 내 생각대로 말했고, 누구에게도 꾸짖지 않았다. 그러니 다음에 글을 쓸 생각이 있을 때 한번 생각해 보시기 바랍니다.
행운을 빕니다 :)
차트로 이동합니다. 부착 지점 - 시작 가격. 손절 - -50 포인트, 이익 - +50 포인트.
라인을 원하는 수준으로 이동하고( 이익 실현 은 제거할 수 있음) 확인을 클릭하면 주문이 이루어집니다.
open_line이 시장 가격보다 높으면 주문은 매수-정지 또는 매도 한도(손절매에 따라 다름)가 되고, 더 낮으면 매도 또는 매수 한도(동일 ).
스크립트는 매우 원시적이며 검사가 없으며 모든 것이 무작위입니다 =)))
열정이있을 것입니다 - 우리는 마무리 할 것입니다 :))
설명에 감사드립니다. 우리는 그것을 확실히 고려할 것이며 더 이상 주문과 관련하여 (true) 하지 않을 것입니다.
다음은 동일한 주문이지만 판매하도록 수정되었습니다.
(바꿔야 할 모든 것을 바래)
//+------------------------------------------------------------------+ //| order_sell.mq4 | //| Copyright c 2004, Alexander Ivanov. | //| mailto:alexander@indus.ru | //+------------------------------------------------------------------+ //| Разрешите импорт функций из библиотек через: | //| "Сервис -> Настройки -> Советники -> Разрешить импорт DLL" | //+------------------------------------------------------------------+ #property copyright "Copyright c 2004, Alexander Ivanov." #property link "mailto:alexander@indus.ru" #include <WinUser32.mqh> #include <stdlib.mqh> #include <stderror.mqh> //+------------------------------------------------------------------+ //| Указываем количество последних дней, на которых ищем минимум | //| для установки стоплосса | //+------------------------------------------------------------------+ #define DAYS_TO_CONSIDER 3 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { return(0); } int deinit() { //---- просто удалим свои линии стопов ObjectDelete( "order_sell_Stop_Loss_Line"); ObjectDelete( "order_sell_Take_Profit_Line"); //---- return(0); } //+------------------------------------------------------------------+ //| Основная функция скрипта | //+------------------------------------------------------------------+ int start() { double DaysLowArray[]; double dMyStopLoss = 0; double dMyPrice = 0; double dMyTakeProfit = 0; double dMyLots = 0; //---- скопируем массив дневных данных if(ArrayCopySeries(DaysLowArray, MODE_HIGH, Symbol(),PERIOD_D1) < DAYS_TO_CONSIDER) { return(-1); } //---- расчет цен dMyPrice = Bid; dMyStopLoss = DaysLowArray[Highest(Symbol(),PERIOD_D1,MODE_HIGH,DAYS_TO_CONSIDER,0)]; dMyTakeProfit = dMyPrice - 2*MathMax((MathAbs(Ask-Bid)/2),MathAbs(dMyPrice-dMyStopLoss)); dMyStopLoss += 10*Point; dMyLots = 0.1; //---- выставим линии для визуального управления стопами ObjectCreate( "order_sell_Stop_Loss_Line", OBJ_HLINE, 0, 0, dMyStopLoss, 0, 0, 0, 0 ); ObjectSet( "order_sell_Stop_Loss_Line", OBJPROP_COLOR, Red ); ObjectSetText( "order_sell_Stop_Loss_Line", "Stop_Loss_Line", 6, "Arial", Red ); ObjectCreate( "order_sell_Take_Profit_Line", OBJ_HLINE, 0, 0, dMyTakeProfit, 0, 0, 0, 0 ); ObjectSet( "order_sell_Take_Profit_Line", OBJPROP_COLOR, Lime ); ObjectSetText( "order_sell_Take_Profit_Line", "Take_Profit_Line", 6, "Arial", Lime ); //---- запросим подтверждение на отработку string quest="Вы хотите продать "+DoubleToStr(dMyLots,2)+" "+Symbol()+" по цене Bid "+ DoubleToStr(dMyPrice,Digits)+" \n\n"+ "Переместите выставленные линии на необходимые уровни и нажмите ОК \n"+ "(красная линия - Stop Loss, зеленая - Take Profit)\n\n"+ "Нажмите Отмена чтобы отказаться от сделки"; if(MessageBoxA(0,quest,"Визуальная установка ордера на продажу", MB_OKCANCEL | MB_ICONASTERISK | MB_TOPMOST)!=IDOK) return(-2); //---- трейдер согласился, возьмем новые уровни стопов и обязательно проверим их! dMyStopLoss =NormalizeDouble(ObjectGet( "order_sell_Stop_Loss_Line", OBJPROP_PRICE1),Digits); dMyTakeProfit=NormalizeDouble(ObjectGet( "order_sell_Take_Profit_Line",OBJPROP_PRICE1),Digits); if((dMyStopLoss>0 && dMyStopLoss<Bid) || (dMyTakeProfit>0 && dMyTakeProfit>Bid)) { Print("Неправильно выставлены уровни Stop Loss и Take Profit!"); MessageBoxA(0,"Неправильно выставлены уровни Stop Loss и Take Profit! \n"+ "Операция отменена\n\n", "Визуальная установка ордера на продажу",MB_OK | MB_ICONSTOP | MB_TOPMOST); return(-3); } //---- выведем в лог сообщение об заявке Print("sell ",DoubleToStr(dMyLots,2)," ",Symbol()," at ",DoubleToStr(dMyPrice,Digits), "sl ",DoubleToStr(dMyStopLoss,Digits)," tp ",DoubleToStr(dMyTakeProfit,Digits)); //---- пробуем послать команду int ticket=OrderSend(Symbol(),OP_SELL,dMyLots,dMyPrice,3,dMyStopLoss,dMyTakeProfit, "Ordered by \"order_sell\" script" ,255,0,HotPink); if(ticket>0) // все отлично - заявка прошла { //---- сразу же выведем в лог подтверждение Print("#",ticket," sell ",DoubleToStr(dMyLots,2)," ",Symbol()," at ", DoubleToStr(dMyPrice,Digits)," is done"); //---- покажем окно if(MessageBoxA(0,"Ордер успешно исполнен \nРаспечатать его?", "Визуальная установка ордера на продажу", MB_YESNO | MB_ICONASTERISK | MB_TOPMOST)==IDYES) { OrderPrint(); } //---- все ок, выходим return(0); } //---- тут все плохо - выведем в лог сообщение int err=GetLastError(); Print("sell ",DoubleToStr(dMyLots,2)," ",Symbol()," at ", DoubleToStr(dMyPrice,Digits)," failed [",ErrorDescription(err),"]"); //----покажем окно MessageBoxA(0,ErrorDescription(err), "Ошибка визуальной установки ордера", MB_OK | MB_ICONERROR | MB_TOPMOST); return(-4); } //+------------------------------------------------------------------+я использовал MB_TOPMOST, попробуй, у меня вроде бы получилось.
그리고 어디에 쓸까요?
예를 들어 여기 :)
MessageBoxA(0,ErrorDescription(err), "오류", MB_OK | MB_ICONERROR | MB_TOPMOST );
죄송합니다, 제가 폭파했습니다.
그래서 재미입니다!
콤포스터에:
어렵지 않으시면 스크립트를 수정하여 각종 체크 등이 가능하도록 해주세요.
그러면 다음과 같은 세 가지 훌륭한 스크립트가 생성됩니다.
1. 보류 중인 주문을 하기 위한 것
2. 시장 매수 주문 을 위한 것
3. 시장 매도 주문용.
더 이상 충분하지 않습니다!
그리고 나서 우리는 계속해서 다른 추가 기능을 찾을 것입니다. 아마도 사람들이 힌트를 주거나 특정 작업을 수행하도록 요청할 것입니다... 그리고 누군가가 개발에 참여한다면 더 좋을 것입니다.)
전문가 코드를 컴파일할 때 오류 경고
'4107' - 다른 값으로 재정의
"로그에 응용 프로그램에 대한 메시지를 표시합니다" 줄로 보냅니다.
재정의해야 할 사항은 무엇입니까?