Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
cosa fa in generale e come usarlo?
grazie in anticipo
L'idea di usare MessageBox per l'indicatore per rallentare la sua esecuzione è ottima. Probabilmente non l'avrei mai detto. Si aprono molte possibilità per il collocamento interattivo degli ordini. Il mio rispetto per te komposter!
Per quanto riguarda coloro che criticano l'implementazione, non so perché dicono che è "rozzo".
Sono sicuro che sarà molto conveniente per molti trader lavorare con il tuo script per piazzare ordini pendenti.
Horn, ho detto quello che penso e non ho rimproverato nessuno. Quindi, per favore, pensateci la prossima volta.
Buona fortuna :)
lo trasferisci sul grafico. il punto di attacco è il prezzo di apertura. stop loss - 50 punti, take profit - +50 punti.
sposti le linee ai livelli richiesti(take profit può essere cancellato), premi ok, l'ordine è piazzato.
Se Openprice_line è superiore al prezzo di mercato - l'ordine sarà o Buy Stop o Sell Limit (a seconda dello Stop Loss), se è inferiore - Sell Stop o Buy Limit (lo stesso).
lo script è molto rozzo, nessun controllo, tutto è a caso =))
sarà entusiasta - lo miglioreremo :))
Grazie per il chiarimento, ne terremo sicuramente conto e non faremo più while(true) con gli ordini.
Ecco lo stesso ordine ma modificato per vendere.
(Spero di aver cambiato tutto)
//+------------------------------------------------------------------+ //| 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, попробуй, у меня вроде бы получилось.
Dove dovrei scriverlo?
Per esempio qui :)
MessageBoxA(0,ErrorDescription(err), "Error", MB_OK | MB_ICONERROR | MB_TOPMOST);
Mi dispiace, mi sono arrabbiato.
Questo è il bello!
a Komposter:
Se non è troppo disturbo, perfezionate il vostro script per avere tutti i tipi di controlli, ecc.
E poi avremo tre grandi sceneggiature:
1. Uno per piazzare ordini in sospeso;
2. uno per l'ordine di acquisto sul mercato;
3. uno per l'ordine di vendita a mercato.
Non è abbastanza!
E poi continueremo a cercare altre caratteristiche aggiuntive, forse la gente darà qualche suggerimento o chiederà di fare qualcosa di specifico... e quello che sarà ancora più bello è se qualcuno si unisce allo sviluppo ;)
Durante la compilazione del codice esperto, un avviso di errore
'4107'- ridefinizione con un altro valore
Va alla linea "registra il messaggio di richiesta".
Cosa deve essere sovrascritto?