커뮤니티

피라미딩 재문의드립니다.

프로필 이미지
착한이
2013-12-18 10:16:36
161
글번호 70587
답변완료
수고하십니다. 아래의 답변주신 수식대로 적용하여 보았으나, 여전히 제가 원하는 대로 구현이 되지 않고 있습니다. 피라미딩 전략에서 진입명이 "피라미딩매도"로 진입한 경우에는 기존의 청산로직이 아닌 수익1.0과 2시에 청산을 시켜야 하는데 여전히 수익 2.0과 12시에 청산이 되고 있습니다. SetStop함수를 쓰면 모든 포지션을 청산시켜버리기 때문에 이런 문제가 나오는 것 같습니다. 다시 한번 검토해 주시기 바랍니다. 안녕하세요 예스스탁입니다. If C > O Then Buy("Buy", AtMarket); If C < O Then Sell("Sell", AtMarket); If MarketPosition == -1 and EntryCount == 1 Then { If PositionProfit < -1.0 Then { Sell("피라미딩매도",Atstop,Highest(High,barsSinceEntry+1)-atr(30)*3); } } if MarketPosition != 0 Then{ if (IsEntryName("Buy") == true or IsEntryName("Sell") == true) Then{ SetStopProfittarget(2.0,PointStop); SetStopEndofday(120000); } if (IsEntryName("피라미딩") == true) Then{ SetStopProfittarget(1.0,PointStop); SetStopEndofday(140000+TimeDelay); } } Else { SetStopProfittarget(0); SetStopEndofday(0); } 즐거운 하루되세요 > 착한이 님이 쓴 글입니다. > 제목 : 피라미딩 문의드립니다. > 수고하십니다. 아래와 같은 피라미딩 전략에서 진입명이 "피라미딩매도"로 진입한 경우에는 기존의 청산로직이 아닌 수익1.0과 2시에 청산을 시킬려면 어떻게 수식을 바꾸어야 하는지 알려주세요. 먼저 진입한 진입명 "Sell"로 진입한 것은 기존대로 수익2.0과 12시에 청산되어야 합니다. 감사합니다. If C > O Then Buy("Buy", AtMarket); If C < O Then Sell("Sell", AtMarket); SetstopProfittarget(2.0, Pointstop); SetstopEndofday(120000); If MarketPosition == -1 and EntryCount == 1 Then { If PositionProfit < -1.0 Then { Sell("피라미딩매도",Atstop,Highest(High,barsSinceEntry+1)-atr(30)*3); } If MarketPosition == -1 and EntryName == "피라미딩매도" Then { SetstopProfittarget(1.0, Pointstop); SetstopEndofday(140000+TimeDelay); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-12-18 17:07:18

안녕하세요 예스스탁입니다. 식을 수정했습니다. 강제청산 함수를 이용하지 않고 수식에서 풀어서 작성했습니다. 피라미딩은 Sell --> 피라미딩매도 순으로 한번만 되는 것으로 간주하고 식을 작성했습니다. 매도진입중이고 sell로 한번만 된 경우에는 2포인트 수익청산 혹은 12시에 청산하고 sell발생후 --> 피라미딩매도로 추가 매도되어 2번 진입이 누적된 경우에는 진입가+1, 혹은 14시에 청산하게 작성했습니다. If MarketPosition <= 0 and C > O Then Buy("Buy", AtMarket); If MarketPosition >= 0 and C < O Then Sell("Sell", AtMarket); If MarketPosition == -1 and EntryCount == 1 Then { If PositionProfit < -1.0 Then { Sell("피라미딩매도",Atstop,Highest(High,barsSinceEntry+1)-atr(30)*3); } } if MarketPosition == -1 Then{ #매도진입이 한번일때 if MaxEntries == 1 Then{ ExitShort("bx1",Atlimit,EntryPrice-2); if stime == 120000 Then ExitShort("End1"); } #추가매도되어 매도진입이 두번일때 if MaxEntries == 2 Then{ ExitShort("bx2",Atlimit,EntryPrice-1); if stime == 140000 Then ExitShort("End2"); } } 수식에서 진입가(entryprice)는 항상 첫번째 진입의 가격만 리턴을 합니다. 피라미딩시 추가된 진입에 대해 신호가격을 리턴하는 함수가 없어 추가된 피라미딩매도신호의 가격은 따로 계산해서 사용해야 합니다. 만약 피라미딩매도로 추가매도한 후에 해당 신호의 가격을 기준으로 1포인트 수익시 청산하고자 하시면 아래식 이용하시면 됩니다. If MarketPosition <= 0 and C > O Then Buy("Buy", AtMarket); If MarketPosition >= 0 and C < O Then Sell("Sell", AtMarket); If MarketPosition == -1 and EntryCount == 1 Then { If PositionProfit < -1.0 Then { Sell("피라미딩매도",Atstop,Highest(High,barsSinceEntry+1)-atr(30)*3); } } if MarketPosition == -1 Then{ if MaxEntries == 1 Then{ ExitShort("bx1",Atlimit,EntryPrice-2); if stime == 120000 Then ExitShort("End1"); } if MaxEntries == 2 Then{ if CurrentContracts > CurrentContracts[1] Then value1 = Highest(High,barsSinceEntry+1)-atr(30)*3; ExitShort("bx2",Atlimit,value1-1); if stime == 140000 Then ExitShort("End2"); } } 즐거운 하루되세요 > 착한이 님이 쓴 글입니다. > 제목 : 피라미딩 재문의드립니다. > 수고하십니다. 아래의 답변주신 수식대로 적용하여 보았으나, 여전히 제가 원하는 대로 구현이 되지 않고 있습니다. 피라미딩 전략에서 진입명이 "피라미딩매도"로 진입한 경우에는 기존의 청산로직이 아닌 수익1.0과 2시에 청산을 시켜야 하는데 여전히 수익 2.0과 12시에 청산이 되고 있습니다. SetStop함수를 쓰면 모든 포지션을 청산시켜버리기 때문에 이런 문제가 나오는 것 같습니다. 다시 한번 검토해 주시기 바랍니다. 안녕하세요 예스스탁입니다. If C > O Then Buy("Buy", AtMarket); If C < O Then Sell("Sell", AtMarket); If MarketPosition == -1 and EntryCount == 1 Then { If PositionProfit < -1.0 Then { Sell("피라미딩매도",Atstop,Highest(High,barsSinceEntry+1)-atr(30)*3); } } if MarketPosition != 0 Then{ if (IsEntryName("Buy") == true or IsEntryName("Sell") == true) Then{ SetStopProfittarget(2.0,PointStop); SetStopEndofday(120000); } if (IsEntryName("피라미딩") == true) Then{ SetStopProfittarget(1.0,PointStop); SetStopEndofday(140000+TimeDelay); } } Else { SetStopProfittarget(0); SetStopEndofday(0); } 즐거운 하루되세요 > 착한이 님이 쓴 글입니다. > 제목 : 피라미딩 문의드립니다. > 수고하십니다. 아래와 같은 피라미딩 전략에서 진입명이 "피라미딩매도"로 진입한 경우에는 기존의 청산로직이 아닌 수익1.0과 2시에 청산을 시킬려면 어떻게 수식을 바꾸어야 하는지 알려주세요. 먼저 진입한 진입명 "Sell"로 진입한 것은 기존대로 수익2.0과 12시에 청산되어야 합니다. 감사합니다. If C > O Then Buy("Buy", AtMarket); If C < O Then Sell("Sell", AtMarket); SetstopProfittarget(2.0, Pointstop); SetstopEndofday(120000); If MarketPosition == -1 and EntryCount == 1 Then { If PositionProfit < -1.0 Then { Sell("피라미딩매도",Atstop,Highest(High,barsSinceEntry+1)-atr(30)*3); } If MarketPosition == -1 and EntryName == "피라미딩매도" Then { SetstopProfittarget(1.0, Pointstop); SetstopEndofday(140000+TimeDelay); }