커뮤니티

수식 부탁드립니다.

프로필 이미지
gaintoga
2013-09-25 22:34:54
121
글번호 67837
답변완료
Input : ma1(5), ma2(60), ma3(200), shortPeriod(12), longPeriod(36), Period(12), LossCut(60), StopCut(20); Var : MACDv(0), MACDsig(0),macdosc(0) ; var1 = ema(C,ma1); var2 = ema(C,ma2); var3 = ema(C,ma3); MACDv = MACD(shortPeriod, longPeriod); MACDsig = ema(MACDv,Period); macdosc = MACDv-ma(MACDv,Period); If MarketPosition == 0 Then { if crossup(macdosc,0) and var1 > var2 and var2 >= var3 Then buy("B1",AtMarket); if CrossDown(macdosc,0) and var1 < var2 and var2 <= var3 Then sell("S1",AtMarket); } If MarketPosition == 1 Then { if CrossDown(macdosc,0) Then ExitLong("ExL1", AtMarket); ExitLong("콜손절", AtStop, EntryPrice-(Losscut*PriceScale)); #SetStopLoss(StopCut*PriceScale,PointStop); Exitlong("콜목표이익", AtLimit, EntryPrice+(StopCut*PriceScale)); } If MarketPosition == -1 Then { if CrossUp(macdosc,0) Then ExitShort("ExS1", AtMarket); ExitShort("풋손절", AtStop, EntryPrice+(Losscut*PriceScale)); #SetStopLoss(StopCut*PriceScale,PointStop); ExitShort("풋목표이익", AtLimit, EntryPrice-(StopCut*PriceScale)); -------------------------------------------------------------------------------- 위 식에 포함하고 싶은게 있습니다. 1. 마틴게일 식으로 손절을 하면 배수로 계약수를 늘려주세요. ( 1 - 2 - 4 - 8 ...) 2. 당일 손절 5번(input변수를 이용해서 수치를 쉽게 변경할 수 있게 해주세요)을 하게 되면 일중 매매 중단. 3. 당일 목표수익이 나오면 일중 매매 중단. (4. 시장가가 아닌 지정가 주문을 넣고 싶습니다. 식으로 표현되지 않는다면 다른 방법을 소개부탁드립니다.) -------------------------------------------------------------------------------- 또 다른 부탁은, 데이매매가 아니라 다음날까지 손절 횟수를 카운트하고 싶습니다. 1. 마틴게일 식으로 손절을 하면 배수로~ 2. 손절이 10번(input변수를 이용해서 수치를 쉽게 변경할 수 있게 해주세요)을 하게 되면 손절 10번째 되는 날 매매 중단. 3. 당일 목표수익이 나오면 목표수익이 나온 날은 매매 중단. (4. 시장가가 아닌 지정가 주문을 넣고 싶습니다.) 이렇게 두가지로 수식 요청드립니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-09-26 19:43:41

안녕하세요 예스스탁입니다. 1. Input : ma1(5), ma2(60), ma3(200), shortPeriod(12), longPeriod(36), Period(12),LossCut(60), StopCut(20),losscntcount(5); Var : MACDv(0), MACDsig(0),macdosc(0) ; var : cnt(0),count(0),losscount(0),cond(false); count = 0; losscount = 0; for cnt = 0 to 20{ if sdate ==EntryDate(cnt) Then count = count+1; if cnt >= 1 and (IsExitName("콜손절",cnt) == true or IsExitName("풋손절",cnt) == true) Then losscount = losscount+1; } var1 = ema(C,ma1); var2 = ema(C,ma2); var3 = ema(C,ma3); MACDv = MACD(shortPeriod, longPeriod); MACDsig = ema(MACDv,Period); macdosc = MACDv-ma(MACDv,Period); Cond = ExitDate(1) == sdate and (IsExitName("콜목표이익",1) == true or IsExitName("풋목표이익",1) == true); If MarketPosition == 0 and losscount < losscntcount and cond == false Then { if crossup(macdosc,0) and var1 > var2 and var2 >= var3 Then { if count == 0 Then buy("B1",AtMarket,def,1); if count >= 1 and (IsExitName("콜손절",1) == true or IsExitName("풋손절",1) == true) Then buy("B2",AtMarket,def,CurrentContracts[BarsSinceExit(1)+1]*2); if count >= 1 and (IsExitName("콜손절",1) == false and IsExitName("풋손절",1) == false) Then buy("B3",AtMarket,def,1); } if CrossDown(macdosc,0) and var1 < var2 and var2 <= var3 Then { if count == 0 Then Sell("S1",AtMarket,def,1); if count >= 1 and (IsExitName("콜손절",1) == true or IsExitName("풋손절",1) == true) Then Sell("S2",AtMarket,def,CurrentContracts[BarsSinceExit(1)+1]*2); if count >= 1 and (IsExitName("콜손절",1) == false and IsExitName("풋손절",1) == false) Then Sell("S3",AtMarket,def,1); } } If MarketPosition == 1 Then { if CrossDown(macdosc,0) Then ExitLong("ExL1", AtMarket); ExitLong("콜손절", AtStop, EntryPrice-(Losscut*PriceScale)); Exitlong("콜목표이익", AtLimit, EntryPrice+(StopCut*PriceScale)); } If MarketPosition == -1 Then { if CrossUp(macdosc,0) Then ExitShort("ExS1", AtMarket); ExitShort("풋손절", AtStop, EntryPrice+(Losscut*PriceScale)); ExitShort("풋목표이익", AtLimit, EntryPrice-(StopCut*PriceScale)); } 2. Input : ma1(5), ma2(60), ma3(200), shortPeriod(12), longPeriod(36), Period(12),LossCut(60), StopCut(20),losscntcount(10); Var : MACDv(0), MACDsig(0),macdosc(0) ; var : losscount(0),Cond(false); var1 = ema(C,ma1); var2 = ema(C,ma2); var3 = ema(C,ma3); MACDv = MACD(shortPeriod, longPeriod); MACDsig = ema(MACDv,Period); macdosc = MACDv-ma(MACDv,Period); Cond = ExitDate(1) == sdate and (IsExitName("콜목표이익",1) == true or IsExitName("풋목표이익",1) == true); IF BarsSinceExit(1) == 1 and (IsExitName("콜손절",1) == true or IsExitName("풋손절",1) == true) Then losscount = losscount+1; If MarketPosition == 0 and losscount < losscntcount and Cond == false Then { if crossup(macdosc,0) and var1 > var2 and var2 >= var3 Then { if TotalTrades == 0 Then buy("B1",AtMarket,def,1); if TotalTrades >= 1 and (IsExitName("콜손절",1) == true or IsExitName("풋손절",1) == true) Then buy("B2",AtMarket,def,CurrentContracts[BarsSinceExit(1)+1]*2); if TotalTrades >= 1 and (IsExitName("콜손절",1) == false and IsExitName("풋손절",1) == false) Then buy("B3",AtMarket,def,1); } if CrossDown(macdosc,0) and var1 < var2 and var2 <= var3 Then { if TotalTrades == 0 Then Sell("S1",AtMarket,def,1); if TotalTrades >= 1 and (IsExitName("콜손절",1) == true or IsExitName("풋손절",1) == true) Then Sell("S2",AtMarket,def,CurrentContracts[BarsSinceExit(1)+1]*2); if TotalTrades >= 1 and (IsExitName("콜손절",1) == false and IsExitName("풋손절",1) == false) Then Sell("S3",AtMarket,def,1); } } If MarketPosition == 1 Then { if CrossDown(macdosc,0) Then ExitLong("ExL1", AtMarket); ExitLong("콜손절", AtStop, EntryPrice-(Losscut*PriceScale)); Exitlong("콜목표이익", AtLimit, EntryPrice+(StopCut*PriceScale)); } If MarketPosition == -1 Then { if CrossUp(macdosc,0) Then ExitShort("ExS1", AtMarket); ExitShort("풋손절", AtStop, EntryPrice+(Losscut*PriceScale)); ExitShort("풋목표이익", AtLimit, EntryPrice-(StopCut*PriceScale)); } 3. 수식에서는 주문가격을 지정할수 있는 부분이 없습니다. 수식에서 신호가 발생하면 시스템 트레이딩 설정창의 매매탭의 매매가격에서 지정한 가격으로 주문이 발생합니다. 수식에서 AtMarket은 신호타입입니다. 시장가등으로 주문가격을 지정하는 부분이 아닙니ㅏ. AtMarket은 if조건 만족하면 다음봉 시가에 신호를 표시하고 리포트의 진입청산가격으로 해당 시가를 적어주는 타입일 뿐입니다. 즐거운 하루되세요 > gaintoga 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다. > Input : ma1(5), ma2(60), ma3(200), shortPeriod(12), longPeriod(36), Period(12), LossCut(60), StopCut(20); Var : MACDv(0), MACDsig(0),macdosc(0) ; var1 = ema(C,ma1); var2 = ema(C,ma2); var3 = ema(C,ma3); MACDv = MACD(shortPeriod, longPeriod); MACDsig = ema(MACDv,Period); macdosc = MACDv-ma(MACDv,Period); If MarketPosition == 0 Then { if crossup(macdosc,0) and var1 > var2 and var2 >= var3 Then buy("B1",AtMarket); if CrossDown(macdosc,0) and var1 < var2 and var2 <= var3 Then sell("S1",AtMarket); } If MarketPosition == 1 Then { if CrossDown(macdosc,0) Then ExitLong("ExL1", AtMarket); ExitLong("콜손절", AtStop, EntryPrice-(Losscut*PriceScale)); #SetStopLoss(StopCut*PriceScale,PointStop); Exitlong("콜목표이익", AtLimit, EntryPrice+(StopCut*PriceScale)); } If MarketPosition == -1 Then { if CrossUp(macdosc,0) Then ExitShort("ExS1", AtMarket); ExitShort("풋손절", AtStop, EntryPrice+(Losscut*PriceScale)); #SetStopLoss(StopCut*PriceScale,PointStop); ExitShort("풋목표이익", AtLimit, EntryPrice-(StopCut*PriceScale)); -------------------------------------------------------------------------------- 위 식에 포함하고 싶은게 있습니다. 1. 마틴게일 식으로 손절을 하면 배수로 계약수를 늘려주세요. ( 1 - 2 - 4 - 8 ...) 2. 당일 손절 5번(input변수를 이용해서 수치를 쉽게 변경할 수 있게 해주세요)을 하게 되면 일중 매매 중단. 3. 당일 목표수익이 나오면 일중 매매 중단. (4. 시장가가 아닌 지정가 주문을 넣고 싶습니다. 식으로 표현되지 않는다면 다른 방법을 소개부탁드립니다.) -------------------------------------------------------------------------------- 또 다른 부탁은, 데이매매가 아니라 다음날까지 손절 횟수를 카운트하고 싶습니다. 1. 마틴게일 식으로 손절을 하면 배수로~ 2. 손절이 10번(input변수를 이용해서 수치를 쉽게 변경할 수 있게 해주세요)을 하게 되면 손절 10번째 되는 날 매매 중단. 3. 당일 목표수익이 나오면 목표수익이 나온 날은 매매 중단. (4. 시장가가 아닌 지정가 주문을 넣고 싶습니다.) 이렇게 두가지로 수식 요청드립니다.