// Downloaded From https://www.WiseStockTrader.com _SECTION_BEGIN("Money-Line"); //-- Am I Smart-- ??? //-- Simulate MT4 Platform MA_Mode = ParamList("Method:", "Simple,Exponential,Smooth,Linear Weighted",2); MA_Price = ParamList("Applied To:", "Close,Open,High,Low,Median Price,Typical Price,Weighted Price"); MA_Period = Param("Period:", 88, 1, 9999 ); MA_Shift = Param("Shift", 0, -10, 10 ); cColor = ParamColor("Color", colorYellow); iStyle = ParamStyle("Style", styleNoLabel, maskAll); iWidth = Param("Width", 3, 1,100); ZOrder = Param("ZOrder",1, -10, 10); switch (MA_Price) { case "Open" : p = Open; break; case "High" : p = High; break; case "Low" : p = Low; break; case "Median Price" : p = (H+L)/2; break; case "Typical Price" : p = (H+L+C)/3; break; case "Weigthed Price" : p = (H+L+C+C)/4; break; default: p = Close; break; } switch (MA_Mode) { case "Exponential": iMA = EMA( P, MA_Period ); break; case "Linear Weighted": iMA = WMA( P, MA_Period ); break; case "Smooth": iMA = Wilders( P, MA_Period ); break; default: iMA = MA( P, MA_Period ); break; } ShortName = _DEFAULT_NAME(); if (MA_Shift !=0) ShortName = ShortName + "x"+MA_Shift; Plot( iMA, ShortName, cColor, iStyle, Null, Null, MA_Shift, ZOrder , iWidth ); _SECTION_END(); _SECTION_BEGIN("Support / Ressistent"); sr=ParamToggle("Plot Supp/Res lines","No|Yes" ,1); Per=Param("Sensitivity",1,0.5,5,0.5); g=Param("No.of Lines",3,1,5,1); x=Cum(1); Pk1=PeakBars(H,per,1)== 0; Tk1=TroughBars(L,per,1)== 0; px1=LastValue(ValueWhen(pk1,x,1)); px2=LastValue(ValueWhen(Pk1,x,2)); px3=LastValue(ValueWhen(Pk1,x,3)); px4=LastValue(ValueWhen(pk1,x,4)); px5=LastValue(ValueWhen(Pk1,x,5)); tx1=LastValue(ValueWhen(Tk1,x,1)); tx2=LastValue(ValueWhen(Tk1,x,2)); tx3=LastValue(ValueWhen(Tk1,x,3)); tx4=LastValue(ValueWhen(Tk1,x,4)); tx5=LastValue(ValueWhen(Tk1,x,5)); XT1 =LastValue(ValueWhen(pk1,H,1));XT1c =LastValue(ValueWhen(pk1,Max(C,O),1)); XT2 =LastValue(ValueWhen(Pk1,H,2));XT2c =LastValue(ValueWhen(pk1,Max(C,O),2)); XT3 =LastValue(ValueWhen(Pk1,H,3));XT3c =LastValue(ValueWhen(pk1,Max(C,O),3)); XT4 =LastValue(ValueWhen(pk1,H,4));XT4c =LastValue(ValueWhen(pk1,Max(C,O),4)); XT5 =LastValue(ValueWhen(Pk1,H,5));XT5c =LastValue(ValueWhen(pk1,Max(C,O),5)); YT1 =LastValue(ValueWhen(tk1,L,1));YT1c =LastValue(ValueWhen(tk1,Min(O,C),1)); YT2 =LastValue(ValueWhen(tk1,L,2));YT2c =LastValue(ValueWhen(tk1,Min(O,C),2)); YT3 =LastValue(ValueWhen(tk1,L,3));YT3c =LastValue(ValueWhen(tk1,Min(O,C),3)); YT4 =LastValue(ValueWhen(tk1,L,4));YT4c =LastValue(ValueWhen(tk1,Min(O,C),4)); YT5 =LastValue(ValueWhen(tk1,L,5));YT5c =LastValue(ValueWhen(tk1,Min(O,C),5)); pk1=IIf(x>px1 AND g>=1 AND sr,XT1,Null);pk1c=IIf(x>px1 AND g>=1 AND sr,XT1c,Null); Col1=IIf( LastValue(C)>pk1, ColorRGB(46,139,87), ColorRGB(180,20,20) ); Plot(pk1,"",31,1);PlotOHLC(0,pk1,pk1c,0,"",Col1,styleCloud|styleNoLabel,Null, Null, Null, -1); pk2=IIf(x>px2 AND g>=2 AND sr,XT2,Null);pk2c=IIf(x>px2 AND g>=2 AND sr,XT2c,Null); Col2=IIf( LastValue(C)>pk2, ColorRGB(47,79,79), ColorRGB(180,40,40) ); Plot(pk2,"",31,1);PlotOHLC(0,pk2,pk2c,0,"",Col2,styleCloud|styleNoLabel,Null, Null, Null, -2); pk3=IIf(x>px3 AND g>=3 AND sr,XT3,Null);pk3c=IIf(x>px3 AND g>=3 AND sr,XT3c,Null); Col3=IIf( LastValue(C)>pk3, ColorRGB(0,100,0),ColorRGB(180,60,60)); Plot(pk3,"",31, 1);PlotOHLC(0,pk3,pk3c,0,"",Col3,styleCloud|styleNoLabel,Null, Null, Null, -3); pk4=IIf(x>px4 AND g>=4 AND sr,XT4,Null);pk4c=IIf(x>px4 AND g>=4 AND sr,XT4c,Null); Col4=IIf( LastValue(C)>pk4, ColorRGB(107,142,35), ColorRGB(180,80,80)); Plot(pk4,"",31,1);PlotOHLC(0,pk4,pk4c,0,"",Col4,styleCloud|styleNoLabel,Null, Null, Null, -4); pk5=IIf(x>px5 AND g>=5 AND sr,XT5,Null);pk5c=IIf(x>px5 AND g>=5 AND sr,XT5c,Null); Col5=IIf( LastValue(C)>pk5, ColorRGB(85,107,47), ColorRGB(180,100,100)); Plot(pk5,"",31,1);PlotOHLC(0,pk5,pk5c,0,"",Col5,styleCloud|styleNoLabel,Null, Null, Null, -5); tl1=IIf(x>tx1 AND g>=1 AND sr,YT1,Null);tl1c=IIf(x>tx1 AND g>=1 AND sr,YT1c,Null); Col1=IIf( LastValue(C)>tl1, ColorRGB(46,139,87), ColorRGB(180,20,20) ); Plot(tl1,"",1,1);PlotOHLC(0,tl1,tl1c,0,"",Col1,styleCloud|styleNoLabel,Null, Null, Null, -1); tl2=IIf(x>tx2 AND g>=2 AND sr,YT2,Null);tl2c=IIf(x>tx2 AND g>=2 AND sr,YT2c,Null); Col2=IIf( LastValue(C)>YT2, ColorRGB(47,79,79), ColorRGB(180,40,40)); Plot(tl2,"",1,1);PlotOHLC(0,tl2,tl2c,0,"",Col2,styleCloud|styleNoLabel,Null, Null, Null, -2); tl3=IIf(x>tx3 AND g>=3 AND sr,YT3,Null);tl3c=IIf(x>tx3 AND g>=3 AND sr,YT3c,Null); Col3=IIf( LastValue(C)>YT3, ColorRGB(0,100,0), ColorRGB(180,60,60) ); Plot(tl3,"",1,1);PlotOHLC(0,tl3,tl3c,0,"",Col3,styleCloud|styleNoLabel,Null, Null, Null, -3); tl4=IIf(x>tx4 AND g>=4 AND sr,YT4,Null);tl4c=IIf(x>tx4 AND g>=4 AND sr,YT4c,Null); Col4=IIf( LastValue(C)>YT4, ColorRGB(107,142,35), ColorRGB(180,80,80) ); Plot(tl4,"",1,1);PlotOHLC(0,tl4,tl4c,0,"",Col4,styleCloud|styleNoLabel,Null, Null, Null, -4); tl5=IIf(x>tx5 AND g>=5 AND sr,YT5,Null);tl5c=IIf(x>tx5 AND g>=5 AND sr,YT5c,Null); Col5=IIf( LastValue(C)>YT5, ColorRGB(85,107,47), ColorRGB(180,100,100)); Plot(tl5,"",1,1);PlotOHLC(0,tl5,tl5c,0,"",Col5,styleCloud|styleNoLabel,Null, Null, Null, -5); GfxSetOverlayMode(1); GfxSetTextColor(10); GfxSelectFont("Old English Text MT", 12, 300, False, False, 0); _SECTION_END(); _SECTION_BEGIN("Trend lines"); SetChartOptions(0, chartShowArrows | chartShowDates); SetChartBkColor(ParamColor("Outer Panel", colorBlack)); SetChartBkGradientFill(ParamColor("Upper Chart", colorDarkGrey), ParamColor("Lower Chart", colorDarkGrey)); GraphXSpace = Param("GraphXSpace", 10, 0, 100, 1); colorHighliter = IIf(C >= O, ColorRGB(0, 128, 0), ColorRGB(128, 0, 0)); //Demand Point colorDemandPoint = ParamColor("Demand Line", ColorRGB(0, 128, 255)); DemandPoint = (Ref(L, -1) < Ref(L, -2)) & (L < Ref(L, -1)) & (L < Ref(L, 1)) & (Ref(L, 1) < Ref(L, 2)); //Supply Point colorSupplyPoint = ParamColor("Supply Line", ColorRGB(255, 128, 0)); SupplyPoint = (Ref(H, -1) > Ref(H, -2)) & (H > Ref(H, -1)) & (H > Ref(H, 1)) & (Ref(H, 1) > Ref(H, 2)); CountTrendBars = 0; CurrentBar = BarCount - 1; dx0 = dx1 = dy0 = dy1 = 0; sx0 = sx1 = sy0 = sy1 = 0; for (i = 0; i < BarCount; i++) { CurrentBar = (BarCount - 1) - i; if (DemandPoint[CurrentBar]) { if (dx1 == 0 & dy1 == 0) { dx1 = CurrentBar; dy1 = L[CurrentBar]; } else { dx0 = CurrentBar; dy0 = L[CurrentBar]; } if (dx0 != 0 & dx1 != 0 & dy0 != 0 & dy1 != 0) { if (dy0 < dy1) { a = (-dy0 + dy1) / (-dx0 + dx1); b = dy0 - dx0 * a; for (j = dx1; j < BarCount; j++) { if (j != dx1) { y2 = a * j + b; if (C[j] < y2) { dy1 = y2; dx1 = j; colorHighliter[j] = ColorRGB(128, 0, 128); CountTrendBars[j] = dx1 - dx0 - 1; break; } } } if (dy1 != y2) { dy1 = y2; dx1 = BarCount - 1; } Plot(LineArray(dx0, dy0, dx1, dy1, 0), "", colorDemandPoint, styleLine, Null, Null, 0, 0, 2); } dx1 = dx0; dy1 = dy0; dx0 = dy0 = 0; } } if (SupplyPoint[CurrentBar]) { if (sx1 == 0 & sy1 == 0) { sx1 = CurrentBar; sy1 = H[CurrentBar]; } else { sx0 = CurrentBar; sy0 = H[CurrentBar]; } if (sx0 != 0 & sx1 != 0 & sy0 != 0 & sy1 != 0) { if (sy0 > sy1) { a = (-sy0 + sy1) / (-sx0 + sx1); b = sy0 - sx0 * a; for (j = sx1; j < BarCount; j++) { if (j != sx1) { y2 = a * j + b; if (C[j] > y2) { sy1 = y2; sx1 = j; colorHighliter[j] = ColorRGB(128, 128, 0); CountTrendBars[j] = sx1 - sx0 - 1; break; } } } if (sy1 != y2) { sy1 = y2; sx1 = BarCount - 1; } Plot(LineArray(sx0, sy0, sx1, sy1, 0), "", colorSupplyPoint, styleLine, Null, Null, 0, 0, 2); } sx1 = sx0; sy1 = sy0; sx0 = sy0 = 0; } } } //Stop Loss & Targets for (i = 0; i < BarCount; i++) { CurrentBar = (BarCount - 1) - i; if (colorHighliter[CurrentBar] == ColorRGB(128, 0, 128)) { StopLoss = 0; for (j = CurrentBar - CountTrendBars[CurrentBar]; j <= CurrentBar; j++) { StopLoss = Max(H[j], StopLoss); } if (CurrentBar - (BarCount - 1) != 0) { t1 = C[CurrentBar] - (StopLoss - C[CurrentBar]); t2 = C[CurrentBar] - ((StopLoss - C[CurrentBar]) * 1.272); t3 = C[CurrentBar] - ((StopLoss - C[CurrentBar]) * 1.618); Plot(LineArray(CurrentBar, StopLoss + 0.01, BarCount - 1, StopLoss + 0.01, 0), "", ColorRGB(255, 0, 0), styleDots | styleNoLabel, Null, Null, 0, 0, 1); Plot(LineArray(CurrentBar, C[CurrentBar], BarCount - 1, C[CurrentBar], 0), "", ColorRGB(255, 255, 0), styleDots, Null, Null, 0, 0, 1); Plot(LineArray(CurrentBar, t1, BarCount - 1, t1, 0), "", ColorRGB(0, 255, 0), styleDots | styleNoLabel, Null, Null, 0, 0, 1); Plot(LineArray(CurrentBar, t2, BarCount - 1, t2, 0), "", ColorRGB(0, 255, 0), styleDots | styleNoLabel, Null, Null, 0, 0, 1); Plot(LineArray(CurrentBar, t3, BarCount - 1, t3, 0), "", ColorRGB(0, 255, 0), styleDots | styleNoLabel, Null, Null, 0, 0, 1); PlotText("Stop Loss\n@" + WriteVal(StopLoss + 0.01, 1.2), BarCount, StopLoss + 0.01, ColorRGB(255, 255, 255)); PlotText("T1 @" + WriteVal(t1, 1.2), BarCount, t1, ColorRGB(255, 255, 255)); PlotText("T2 @" + WriteVal(t2, 1.2), BarCount, t2, ColorRGB(255, 255, 255)); PlotText("T3 @" + WriteVal(t3, 1.2), BarCount, t3, ColorRGB(255, 255, 255)); } break; } if (colorHighliter[CurrentBar] == ColorRGB(128, 128, 0)) { StopLoss = 9999; for (j = CurrentBar - CountTrendBars[CurrentBar]; j <= CurrentBar; j++) { StopLoss = Min(L[j], StopLoss); } if (CurrentBar - (BarCount - 1) != 0) { t1 = C[CurrentBar] + (C[CurrentBar] - StopLoss); t2 = C[CurrentBar] + ((C[CurrentBar] - StopLoss) * 1.272); t3 = C[CurrentBar] + ((C[CurrentBar] - StopLoss) * 1.618); Plot(LineArray(CurrentBar, StopLoss - 0.01, BarCount - 1, StopLoss - 0.01, 0), "", ColorRGB(255, 0, 0), styleDots | styleNoLabel, Null, Null, 0, 0, 1); Plot(LineArray(CurrentBar, C[CurrentBar], BarCount - 1, C[CurrentBar], 0), "", ColorRGB(255, 255, 0), styleDots, Null, Null, 0, 0, 1); Plot(LineArray(CurrentBar, t1, BarCount - 1, t1, 0), "", ColorRGB(0, 255, 0), styleDots | styleNoLabel, Null, Null, 0, 0, 1); Plot(LineArray(CurrentBar, t2, BarCount - 1, t2, 0), "", ColorRGB(0, 255, 0), styleDots | styleNoLabel, Null, Null, 0, 0, 1); Plot(LineArray(CurrentBar, t3, BarCount - 1, t3, 0), "", ColorRGB(0, 255, 0), styleDots | styleNoLabel, Null, Null, 0, 0, 1); PlotText("Stop Loss\n@" + WriteVal(StopLoss - 0.01, 1.2), BarCount, StopLoss - 0.01, ColorRGB(255, 255, 255)); PlotText("T1 @" + WriteVal(t1, 1.2), BarCount, t1, ColorRGB(255, 255, 255)); PlotText("T2 @" + WriteVal(t2, 1.2), BarCount, t2, ColorRGB(255, 255, 255)); PlotText("T3 @" + WriteVal(t3, 1.2), BarCount, t3, ColorRGB(255, 255, 255)); } break; } } //Price SetBarFillColor(colorHighliter); Plot(C, "Close", IIf(colorHighliter == ColorRGB(128, 0, 128), ColorRGB(255, 0, 255), IIf(colorHighliter == ColorRGB(128, 128, 0), ColorRGB(255, 255, 0), IIf(C > O, ColorRGB(0, 255, 0), IIf(C < O, ColorRGB(255, 0, 0), ColorRGB(255, 255, 255))))), styleCandle, Null, Null, 0, 0, 1); //Volume /*colorVolume = ParamColor("Volume Area", ColorRGB(0, 0, 0)); Plot(Volume, "", colorVolume, styleArea | styleOwnScale | styleNoLabel, Null, Null, 0, 0, 1);*/ Title = Name() + " - {{INTERVAL}} - {{DATE}} - Open = " + NumToStr(O, 1.2) + ", High = " + NumToStr(H, 1.2) + ", Low = " + NumToStr(L, 1.2) + ", Close = " + NumToStr(C, 1.2) + " (" + WriteVal(ROC(C, 1), 1.2) + "%)"; /*, Volume = " + WriteVal(Volume, 1.2);*/ _SECTION_END(); _SECTION_BEGIN("Manual Tester"); // Manual Tester.afl // Ручной тестер для AmiBroker if(TickSize == 0) { PopupWindow("\nУкажите в свойствах символа (Symbol -> Information) параметр TickSize!", "Error"); } else { // параметры StartX = Param("Buttons X", 30, 0, 1000, 5); StartY = Param("Buttons Y", 20, 0, 1000, 5); Spread = Param("Spread (pips)", 0, 0, 1000) * TickSize; ScanMode = ParamList("Scan Mode", "Test|Clear all signals|Save to file|Load from file", 0); fileName = ParamStr("File path", "E://Программы/AmiBroker/Tester/Trades.txt"); // инициализация BarDateTime = DateTime(); Buy = Sell = Short = Cover = 0; BuyPrice = SellPrice = ShortPrice = CoverPrice = C; // режим выполнения кода formulaAction = Status("ActionEx"); // -------------- РЕЖИМ ИНДИКАТОРА --------------- if(formulaAction == actionIndicator) { // парамеры графика RequestTimedRefresh(1); GfxSetOverlayMode(0); GfxSetBkMode(1); // размер кнопок и расстояние между ними CellHeight = 24; CellWidth = 70; CellXSpace = 10; // цвета кнопок BorderColor = colorBlack; InactiveButtonColor = colorCustom6; ActiveButtonColor = colorRed; // номер активной кнопки ActiveButton = StaticVarGet("ActiveButton"); // парамеры рисования кнопок GfxSelectPen(BorderColor, 2); GfxSelectFont( "Tahoma", 11 , 700); // отрисовка кнопок for(btn = 1; btn <= 6; btn++) { if(ActiveButton == btn) { GfxSelectSolidBrush(ActiveButtonColor); GfxSetTextColor(colorWhite); } else { GfxSelectSolidBrush(InactiveButtonColor); GfxSetTextColor(ColorRGB(40,40,40)); } CellX = StartX + (btn - 1) * (CellWidth + CellXSpace); GfxRectangle(CellX, StartY, CellX + CellWidth, StartY + CellHeight); switch(btn) { case 1: BtnText = "Buy"; break; case 2: BtnText = "Sell"; break; case 3: BtnText = "Short"; break; case 4: BtnText = "Cover"; break; case 5: BtnText = "Clear"; break; case 6: BtnText = "Clear All"; break; } GfxDrawText(BtnText, CellX, StartY, CellX + CellWidth, StartY + CellHeight, 32+1+4); } // обработка нажатия левой кнопки if(GetCursorMouseButtons() & 8) { // координаты курсора в пикселах px = GetCursorXPosition(1); py = GetCursorYPosition(1); buttonPressed = False; if(py >= StartY AND py <= StartY + CellHeight) { for(btn = 1; btn <= 6; btn++) { CellX = StartX + (btn - 1) * (CellWidth + CellXSpace); if(px >= CellX AND px <= CellX + CellWidth) { // активация или деактивация кнопки if(ActiveButton == btn) StaticVarSet("ActiveButton", 0); else StaticVarSet("ActiveButton", btn); buttonPressed = True; break; } } } // нажата кнопка "Clear All" if(buttonPressed == True AND StaticVarGet("ActiveButton") == 6) { for(i = 0; i < BarCount; i++) { StaticVarRemove(Name() + "Buy" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "Sell" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "Short" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "Cover" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "BuyPrice" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "SellPrice" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "ShortPrice" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "CoverPrice" + DateTimeToStr(BarDateTime[i])); } StaticVarSet("ActiveButton", 0); } // запись сделки в статическую переменную if(buttonPressed == False) { // координаты курсора цена/дата x = GetCursorXPosition(0); y = GetCursorYPosition(0); y = round(y / TickSize) * TickSize; // округление до TickSize // Buy if(ActiveButton == 1) { VarBuy = Name() + "Buy" + DateTimeToStr(x); VarBuyPrice = Name() + "BuyPrice" + DateTimeToStr(x); StaticVarSet(VarBuy, 1); StaticVarSet(VarBuyPrice, y); } // Sell if(ActiveButton == 2) { VarSell = Name() + "Sell" + DateTimeToStr(x); VarSellPrice = Name() + "SellPrice" + DateTimeToStr(x); StaticVarSet(VarSell, 1); StaticVarSet(VarSellPrice, y); } // Short if(ActiveButton == 3) { VarShort = Name() + "Short" + DateTimeToStr(x); VarShortPrice = Name() + "ShortPrice" + DateTimeToStr(x); StaticVarSet(VarShort, 1); StaticVarSet(VarShortPrice, y); } // Cover if(ActiveButton == 4) { VarCover = Name() + "Cover" + DateTimeToStr(x); VarCoverPrice = Name() + "CoverPrice" + DateTimeToStr(x); StaticVarSet(VarCover, 1); StaticVarSet(VarCoverPrice, y); } // Clear if(ActiveButton == 5) { VarBuy = Name() + "Buy" + DateTimeToStr(x); VarBuyPrice = Name() + "BuyPrice" + DateTimeToStr(x); VarSell = Name() + "Sell" + DateTimeToStr(x); VarSellPrice = Name() + "SellPrice" + DateTimeToStr(x); VarShort = Name() + "Short" + DateTimeToStr(x); VarShortPrice = Name() + "ShortPrice" + DateTimeToStr(x); VarCover = Name() + "Cover" + DateTimeToStr(x); VarCoverPrice = Name() + "CoverPrice" + DateTimeToStr(x); StaticVarRemove(VarBuy); StaticVarRemove(VarSell); StaticVarRemove(VarShort); StaticVarRemove(VarCover); StaticVarRemove(VarBuyPrice); StaticVarRemove(VarSellPrice); StaticVarRemove(VarShortPrice); StaticVarRemove(VarCoverPrice); } StaticVarSet("ActiveButton", 0); // деактивация кнопки после выполнения действия } } // копирование сделок из статических переменных в торговые массивы for(i = 0; i < BarCount; i++) { BuySig = StaticVarGet(Name() + "Buy" + DateTimeToStr(BarDateTime[i])); SellSig = StaticVarGet(Name() + "Sell" + DateTimeToStr(BarDateTime[i])); ShortSig = StaticVarGet(Name() + "Short" + DateTimeToStr(BarDateTime[i])); CoverSig = StaticVarGet(Name() + "Cover" + DateTimeToStr(BarDateTime[i])); if(BuySig) { Buy[i] = 1; BuyPrice[i] = StaticVarGet(Name() + "BuyPrice" + DateTimeToStr(BarDateTime[i])) + spread; } if(SellSig) { Sell[i] = 1; SellPrice[i] = StaticVarGet(Name() + "SellPrice" + DateTimeToStr(BarDateTime[i])); } if(ShortSig) { Short[i] = 1; ShortPrice[i] = StaticVarGet(Name() + "ShortPrice" + DateTimeToStr(BarDateTime[i])); } if(CoverSig) { Cover[i] = 1; CoverPrice[i] = StaticVarGet(Name() + "CoverPrice" + DateTimeToStr(BarDateTime[i])) + spread; } } // ------ Отрисовка стрелок PlotShapes(Buy * shapeUpArrow, colorLime, 0, BuyPrice, -8); PlotShapes(Sell * shapeDownArrow, colorCustom12, 0, SellPrice, -8); PlotShapes(Short * shapeHollowDownArrow, colorCustom12, 0, ShortPrice, -8); PlotShapes(Cover * shapeHollowUpArrow, colorLime, 0, CoverPrice, -8); } // -------------- РЕЖИМ ТЕСТИРОВАНИЯ ИЛИ СКАНИРОВАНИЯ --------------- if(formulaAction == actionScan OR formulaAction == actionBacktest) { // тестирование if(ScanMode == "Test") { // настройки тестера SetOption("InitialEquity", 10000); SetOption("AllowPositionShrinking", False); SetOption("ReverseSignalForcesExit", True); SetOption("AllowSameBarExit", True); SetOption("ActivateStopsImmediately", True); SetOption("MaxOpenPositions", 100); SetOption("PriceBoundChecking", False); SetOption("FuturesMode", True); SetOption("CommissionMode", 2); SetOption("CommissionAmount", 0); SetTradeDelays(0, 0, 0, 0); PositionSize = 100; MarginDeposit = 100; RoundLotSize = 1; PointValue = 1/TickSize; // чтение сделок из статических переменных for(i = 0; i < BarCount; i++) { BuySig = StaticVarGet(Name() + "Buy" + DateTimeToStr(BarDateTime[i])); SellSig = StaticVarGet(Name() + "Sell" + DateTimeToStr(BarDateTime[i])); ShortSig = StaticVarGet(Name() + "Short" + DateTimeToStr(BarDateTime[i])); CoverSig = StaticVarGet(Name() + "Cover" + DateTimeToStr(BarDateTime[i])); if(BuySig) { Buy[i] = 1; BuyPrice[i] = StaticVarGet(Name() + "BuyPrice" + DateTimeToStr(BarDateTime[i])) + spread; } if(SellSig) { Sell[i] = 1; SellPrice[i] = StaticVarGet(Name() + "SellPrice" + DateTimeToStr(BarDateTime[i])); } if(ShortSig) { Short[i] = 1; ShortPrice[i] = StaticVarGet(Name() + "ShortPrice" + DateTimeToStr(BarDateTime[i])); } if(CoverSig) { Cover[i] = 1; CoverPrice[i] = StaticVarGet(Name() + "CoverPrice" + DateTimeToStr(BarDateTime[i])) + spread; } } } // очистка статических переменных if(ScanMode == "Clear all signals") { for(i = 0; i < BarCount; i++) { StaticVarRemove(Name() + "Buy" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "Sell" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "Short" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "Cover" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "BuyPrice" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "SellPrice" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "ShortPrice" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "CoverPrice" + DateTimeToStr(BarDateTime[i])); } StaticVarSet("ActiveButton", 0); } // сохранение сделок в файл if(ScanMode == "Save to file") { // количество цифр после запятой digits = Max(log10(1/TickSize), 0); // открытие файла для записи fh = fopen(fileName, "w"); if(fh) { for(i = 0; i < BarCount; i++) { BuySig = StaticVarGet(Name() + "Buy" + DateTimeToStr(BarDateTime[i])); SellSig = StaticVarGet(Name() + "Sell" + DateTimeToStr(BarDateTime[i])); ShortSig = StaticVarGet(Name() + "Short" + DateTimeToStr(BarDateTime[i])); CoverSig = StaticVarGet(Name() + "Cover" + DateTimeToStr(BarDateTime[i])); if(BuySig) { Price = StaticVarGet(Name() + "BuyPrice" + DateTimeToStr(BarDateTime[i])); fputs(Name() + "Buy," + DateTimeToStr(BarDateTime[i]) + "," + NumToStr(Price, digits/10, False) + "\n", fh); } if(SellSig) { Price = StaticVarGet(Name() + "SellPrice" + DateTimeToStr(BarDateTime[i])); fputs(Name() + "Sell," + DateTimeToStr(BarDateTime[i]) + "," + NumToStr(Price, digits/10, False) + "\n", fh); } if(ShortSig) { Price = StaticVarGet(Name() + "ShortPrice" + DateTimeToStr(BarDateTime[i])); fputs(Name() + "Short," + DateTimeToStr(BarDateTime[i]) + "," + NumToStr(Price, digits/10, False) + "\n", fh); } if(CoverSig) { Price = StaticVarGet(Name() + "CoverPrice" + DateTimeToStr(BarDateTime[i])); fputs(Name() + "Cover," + DateTimeToStr(BarDateTime[i]) + "," + NumToStr(Price, digits/10, False) + "\n", fh); } } fclose(fh); } else PopupWindow("\n\nОшибка открытия или создания файла " + fileName + "\n\nСоздайте указанный каталог", "Export Error", 60); } // загрузка сделок из файла if(ScanMode == "Load from file") { // открытие файла для чтения fh = fopen(fileName, "r"); if(fh) { // очистка графика от сигналов for(i = 0; i < BarCount; i++) { StaticVarRemove(Name() + "Buy" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "Sell" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "Short" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "Cover" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "BuyPrice" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "SellPrice" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "ShortPrice" + DateTimeToStr(BarDateTime[i])); StaticVarRemove(Name() + "CoverPrice" + DateTimeToStr(BarDateTime[i])); } StaticVarSet("ActiveButton", 0); // чтение сигналов из файла while(! feof(fh)) { // чтение строки из файла stringTrade = fgets(fh); // парсинг sName = StrExtract(stringTrade, 0); sSig = StrExtract(stringTrade, 1); sDate = StrExtract(stringTrade, 2); sPrice = StrExtract(stringTrade, 3); VarSig = sName + sSig + sDate; VarPrice = sName + sSig + "Price" + sDate; // запись в статические переменные StaticVarSet(VarSig, 1); StaticVarSet(VarPrice, StrToNum(sPrice)); } fclose(fh); } else PopupWindow("\n\nОшибка открытия файла " + fileName + "\n\nУказанный файл не существует.", "Import error", 60); } } } _SECTION_END();